{"id":48084471,"url":"https://github.com/upbound/marketplace-mcp-server","last_synced_at":"2026-04-04T15:07:21.503Z","repository":{"id":329182231,"uuid":"1003071565","full_name":"upbound/marketplace-mcp-server","owner":"upbound","description":"MCP Server providing various tools for working with the Upbound Marketplace","archived":false,"fork":false,"pushed_at":"2025-12-17T23:35:47.000Z","size":98,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-21T08:40:50.213Z","etag":null,"topics":["ai","crossplane","crossplane-functions","functions","go","golang","intelligent-functions","mcp","mcp-server","upbound","upbound-ai","upbound-crossplane","upbound-official","uxp","xp"],"latest_commit_sha":null,"homepage":"https://docs.upbound.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/upbound.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-16T15:20:15.000Z","updated_at":"2025-12-17T23:35:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/upbound/marketplace-mcp-server","commit_stats":null,"previous_names":["upbound/marketplace-mcp-server"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/upbound/marketplace-mcp-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upbound%2Fmarketplace-mcp-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upbound%2Fmarketplace-mcp-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upbound%2Fmarketplace-mcp-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upbound%2Fmarketplace-mcp-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/upbound","download_url":"https://codeload.github.com/upbound/marketplace-mcp-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upbound%2Fmarketplace-mcp-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31403952,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","crossplane","crossplane-functions","functions","go","golang","intelligent-functions","mcp","mcp-server","upbound","upbound-ai","upbound-crossplane","upbound-official","uxp","xp"],"created_at":"2026-04-04T15:07:16.442Z","updated_at":"2026-04-04T15:07:21.496Z","avatar_url":"https://github.com/upbound.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Upbound Marketplace MCP Server\n[![CI](https://github.com/upbound/marketplace-mcp-server/actions/workflows/ci.yaml/badge.svg)](https://github.com/upbound/marketplace-mcp-server/actions/workflows/ci.yaml)\n[![Slack](https://img.shields.io/badge/slack-upbound_crossplane-purple?logo=slack)](https://crossplane.slack.com/archives/C01TRKD4623)\n[![GitHub release](https://img.shields.io/github/release/upbound/marketplace-mcp-server/all.svg)](https://github.com/upbound/marketplace-mcp-server/releases)\n\nA Model Context Protocol (MCP) server that provides AI agents with access to the Upbound Marketplace API. This server enables agents to search, discover, and manage marketplace packages and repositories, with a focus on helping users leverage marketplace resources for Crossplane compositions and package management.\n\nBuilt using the [mcp-go](https://github.com/mark3labs/mcp-go) framework for robust MCP protocol compliance and performance.\n\n## Features\n\n- **Package Search**: Search for packages across the Upbound Marketplace with advanced filtering\n- **Package Metadata**: Get detailed information about packages including CRDs, examples, and documentation\n- **Asset Access**: Retrieve package assets like CRDs, examples, docs, and package files\n- **Repository Management**: Browse and manage repositories\n- **Authentication**: UP CLI-based authentication for accessing private resources\n- **Multi-API Support**: Supports both v1 and v2 marketplace APIs\n- **Composition Focus**: Specialized tools for working with Crossplane compositions and functions\n\n## Installation\n\n### Using pre-existing artifacts for local agents\n\nSteps:\n1. Login using `up`\n```\nup login\n```\n2. Start the marketplace-mcp-server making sure to reference your `up` config\n   1. Note the location for your `up` config is generally located under $HOME/.up.\n   2. The below command will mount your up config into the docker container running the mcp server so that it can reuse your identity when interacting with the Upbound Marketplace.\n```\ndocker run --name mcp-marketplace --rm -i -d -p 8765:8765 -v {{REPLACE WITH THE DIRECTORY FOR up}}/.up:/mcp/.up:ro xpkg.upbound.io/upbound/marketplace-mcp-server-http:v0.1.0\n``` \n\n3. Update the mcpServers block specifying the location of the marketplace mcp-server\n```json\n{\n  \"mcpServers\": {\n    \"marketplace\": {\n      \"httpUrl\": \"http://localhost:8765/mcp\"\n    }\n  }\n}\n```\n\nStart the marketplace-mcp-server-http\n\n### Using Docker (Recommended)\n\nBuild the Docker image locally:\n\n```bash\ngit clone https://github.com/upbound/marketplace-mcp-server.git\ncd marketplace-mcp-server\ndocker build --target stdio -t marketplace-mcp-server:latest .\n```\n\n**Note**: You must have the UP CLI installed and authenticated for the server to access marketplace resources. Run `up login` before using the MCP server.\n\n### Building from Source\n\n```bash\ngit clone https://github.com/upbound/marketplace-mcp-server.git\ncd marketplace-mcp-server\ngo build ./cmd/mcp-server\n```\n\n## Usage with AI Agents\n\n### Claude Desktop\n\nAdd the following to your Claude Desktop configuration file:\n\n**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n**Windows**: `%APPDATA%/Claude/claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"marketplace\": {\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\",\n        \"--name\", \"mcp-marketplace\",\n        \"--rm\",\n        \"-i\",\n        \"-v\", \"/Users/your-username/.up:/mcp/.up:ro\",\n        \"marketplace-mcp-server:latest\"\n      ]\n    }\n  }\n}\n```\n\n**Important**: Replace `/Users/your-username/.up` with your actual UP CLI config directory path:\n- **macOS/Linux**: `~/.up` (typically `/Users/username/.up` or `/home/username/.up`)\n- **Windows**: `%USERPROFILE%\\.up`\n\n### Other MCP-Compatible Agents\n\nFor agents that support MCP, configure them to connect to the server using stdio transport:\n\n```bash\n# Using the built binary\n./mcp-server\n\n# Using Docker\ndocker run -i --rm -v ~/.up:/mcp/.up:ro marketplace-mcp-server:latest\n```\n\n### HTTP API Interface\n\nThe server also supports HTTP transport for integration with web applications and REST clients:\n\n```bash\n# Start HTTP server locally\n./mcp-http\n\n# Or using Docker\ndocker run --rm -p 8765:8765 -v ~/.up:/mcp/.up:ro marketplace-mcp-server-http:latest\n```\n\nThe HTTP server provides a JSON-RPC 2.0 API at `http://localhost:8765/mcp`. Example usage:\n\n```bash\n# List available tools\ncurl -X POST http://localhost:8765/mcp \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"tools/list\", \"params\": {}}'\n\n# Search for packages\ncurl -X POST http://localhost:8765/mcp \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\": \"2.0\", \"id\": 2, \"method\": \"tools/call\", \"params\": {\"name\": \"search_packages\", \"arguments\": {\"query\": \"aws\", \"size\": 5}}}'\n```\n\nThe HTTP interface operates in stateless mode, so no session initialization is required.\n\n## Available Tools\n\n### 1. search_packages\n\nSearch for packages in the Upbound Marketplace.\n\n**Parameters:**\n- `query` (string): Search query for packages\n- `family` (string): Family repository key to filter by\n- `package_type` (string): Type of package (provider, configuration, function)\n- `account_name` (string): Account/organization name to filter by\n- `tier` (string): Package tier (official, community, etc.)\n- `public` (boolean): Filter by public/private packages\n- `size` (integer): Number of results to return (max 500, default 20)\n- `page` (integer): Page number (0-indexed, default 0)\n- `use_v1` (boolean): Use v1 API instead of v2 (default false)\n\n**Example:**\n```json\n{\n  \"name\": \"search_packages\",\n  \"arguments\": {\n    \"query\": \"aws provider\",\n    \"tier\": \"official\",\n    \"public\": true,\n    \"size\": 10\n  }\n}\n```\n\n### 2. get_package_metadata\n\nGet detailed metadata for a specific package.\n\n**Parameters:**\n- `account` (string, required): Account/organization name\n- `repository` (string, required): Repository name\n- `version` (string): Package version (optional, gets latest if not specified)\n- `use_v1` (boolean): Use v1 API instead of v2 (default false)\n\n**Example:**\n```json\n{\n  \"name\": \"get_package_metadata\",\n  \"arguments\": {\n    \"account\": \"upbound\",\n    \"repository\": \"provider-aws\"\n  }\n}\n```\n\n### 3. get_package_assets\n\nGet assets (documentation, icons, release notes, etc.) for a specific package version.\n\n**Parameters:**\n- `account` (string, required): Account/organization name\n- `repository` (string, required): Repository name\n- `version` (string, required): Package version or 'latest'\n- `asset_type` (string, required): Type of asset (docs, icon, readme, releaseNotes, sbom)\n\n**Example:**\n```json\n{\n  \"name\": \"get_package_assets\",\n  \"arguments\": {\n    \"account\": \"upbound\",\n    \"repository\": \"provider-aws\",\n    \"version\": \"latest\",\n    \"asset_type\": \"docs\"\n  }\n}\n```\n\n### 4. get_repositories\n\nGet repositories for an account.\n\n**Parameters:**\n- `account` (string, required): Account/organization name\n- `filter` (string): AIP-160 formatted filter (v2 only)\n- `size` (integer): Number of results to return (default 20)\n- `page` (integer): Page number (0-indexed, default 0)\n- `use_v1` (boolean): Use v1 API instead of v2 (default false)\n\n**Example:**\n```json\n{\n  \"name\": \"get_repositories\",\n  \"arguments\": {\n    \"account\": \"upbound\",\n    \"filter\": \"type = 'provider' AND public = true\"\n  }\n}\n```\n\n### 5. reload_auth\n\nReload authentication from UP CLI configuration. Useful when switching UP CLI profiles.\n\n**Parameters:**\n- No parameters required\n\n**Example:**\n```json\n{\n  \"name\": \"reload_auth\",\n  \"arguments\": {}\n}\n```\n\n### 6. get_package_version_resources\n\nGet package version resources for a supplied repository name.\n\n**Parameters:**\n- `account` (string, required): Account/organization name. For example upbound.\n- `repository_name` (string, required): The name of the repository. For example provider-aws-s3.\n- `version` (string, required): The version of the package. For example v1.23.1.\n\n**Example:**\n```json\n{\n  \"name\": \"get_package_version_resources\",\n  \"arguments\": {\n    \"account\": \"upbound\",\n    \"repository_name\": \"provider-aws-s3\",\n    \"version\": \"v1.23.1 \n  }\n}\n```\n\n### 7. get_package_version_composition_resources\n\nGet package version composition resources for a supplied group, kind and version and composition.\n\n**Parameters:**\n- `account` (string, required): Account/organization name. For example upbound.\n- `repository_name` (string, required): The name of the repository. For example configuration-caas.\n- `version` (string, required): The version of the package. For example v0.4.0.\n- `resource_group` (string, required): The group of the resource. For example caas.upbound.io.\n- `resource_kind` (string, required): The kind of the resource. For example XCluster.\n- `composition_name` (string, required): The kind of the resource. For example xclusters.caas.upbound.io.\n\n**Example:**\n```json\n{\n  \"name\": \"get_package_version_composition_resources\",\n  \"arguments\": {\n    \"account\": \"upbound\",\n    \"repository_name\": \"configuration-caas\",\n    \"version\": \"v0.4.0\",\n    \"resource_group\": \"caas.upbound.io\",\n    \"resource_kind\": \"XCluster\",\n    \"composition_name\": \"xclusters.caas.upbound.io\"\n  }\n}\n```\n\n### 8. get_package_version_groupkind_resources\n\nGet package version resources for a supplied group, kind and version.\n\n**Parameters:**\n- `account` (string, required): Account/organization name. For example upbound.\n- `repository_name` (string, required): The name of the repository. For example provider-aws-s3.\n- `version` (string, required): The version of the package. For example v1.23.1.\n- `resource_group` (string, required): The group of the resource. For example s3.aws.upbound.io.\n- `resource_kind` (string, required): The kind of the resource. For example Bucket.\n\n**Example:**\n```json\n{\n  \"name\": \"get_package_version_groupkind_resources\",\n  \"arguments\": {\n    \"account\": \"upbound\",\n    \"repository_name\": \"provider-aws-s3\",\n    \"version\": \"v1.23.1\",\n    \"resource_group\": \"s3.aws.upbound.io\",\n    \"resource_kind\": \"Bucket\"\n  }\n}\n```\n\n### 8. get_package_version_examples\n\nGet package version examples for a supplied group, kind and version.\n\n**Parameters:**\n- `account` (string, required): Account/organization name. For example upbound.\n- `repository_name` (string, required): The name of the repository. For example provider-aws-s3.\n- `version` (string, required): The version of the package. For example v1.23.1.\n- `resource_group` (string, required): The group of the resource. For example s3.aws.upbound.io.\n- `resource_kind` (string, required): The kind of the resource. For example Bucket.\n\n**Example:**\n```json\n{\n  \"name\": \"get_package_version_groupkind_resources\",\n  \"arguments\": {\n    \"account\": \"upbound\",\n    \"repository_name\": \"provider-aws-s3\",\n    \"version\": \"v1.23.1\",\n    \"resource_group\": \"s3.aws.upbound.io\",\n    \"resource_kind\": \"Bucket\"\n  }\n}\n```\n\n## Authentication\n\nThe MCP server uses UP CLI authentication for accessing marketplace resources:\n\n### Prerequisites\n1. Install the UP CLI: https://docs.upbound.io/cli/\n2. Authenticate with your Upbound account: `up login`\n3. Ensure your UP CLI config is accessible to the Docker container\n\n### Docker Configuration\nThe server automatically loads authentication from your UP CLI configuration when the container starts. Make sure to mount your UP CLI config directory:\n\n```bash\n-v ~/.up:/mcp/.up:ro\n```\n\n### Switching Profiles\nIf you have multiple UP CLI profiles, you can:\n1. Switch profiles using `up profile use \u003cprofile-name\u003e`\n2. Use the `reload_auth` tool to reload the new authentication without restarting the server\n\n### Private Resources\nThe server will automatically use your authenticated session to access private repositories and resources that your account has permission to view.\n\n## API Filtering (v2)\n\nThe v2 API supports advanced filtering using AIP-160 format:\n\n### Package Search Filters\n- `query = 'crossplane'` - Text search\n- `family = 'upbound/provider-aws'` - Family repository\n- `packageType = 'provider'` - Package type\n- `accountName = 'upbound'` - Account name\n- `public = true` - Public packages only\n- `tier = 'official'` - Official tier packages\n\n### Repository Filters\n- `type = 'provider'` - Repository type\n- `name = 'my-repo'` - Repository name\n- `public = true` - Public repositories\n- `policy = 'publish'` - Repository policy\n- `creation_date \u003e '2023-01-01'` - Created after date\n\n### Combining Filters\n```\n(accountName = 'upbound' OR accountName = 'crossplane') AND public = true AND tier = 'official'\n```\n\n## Use Cases\n\n### 1. Package Discovery\nFind packages for specific cloud providers or use cases:\n```\nSearch for \"AWS S3\" packages to find providers and configurations for S3 resources.\n```\n\n### 2. Composition Development\nGet examples and CRDs for building compositions:\n```\n1. Search for provider packages\n2. Get package metadata to see available CRDs\n3. Get examples to understand usage patterns\n4. Use CRDs and examples to build compositions\n```\n\n### 3. Package Analysis\nAnalyze package dependencies and compatibility:\n```\n1. Get package metadata for dependency information\n2. Check available versions\n3. Review documentation and examples\n```\n\n### 4. Repository Management\nBrowse and manage organization repositories:\n```\n1. Ensure UP CLI is authenticated (up login)\n2. List repositories with filtering\n3. Get detailed repository information\n```\n\n## Configuration\n\nThe server automatically detects and loads UP CLI configuration from the \nfollowing locations:\n1. `/mcp/.up/config.json` (when running in Docker with mounted config)\n2. `~/.up/config.json` (default UP CLI location)\n\nNo additional configuration is required if UP CLI is properly set up and \nauthenticated.\n\n### As an Addon\nNote, the marketplace-mcp-server does still need authentication as described in\nthe above section. In order to fulfill that need, you should provide a secret\nwith the contents of the ~/.up/config.json.\n\nFor example:\n```bash\n  kubectl -n crossplane-system create secret generic up-config --from-file=config.json=path/to/up/config.json\n```\n\n## Development\n\n### Prerequisites\n- Go 1.23 or later (required by mcp-go framework)\n- Docker (for containerization)\n\n### Running Locally\n\n**Stdio Transport (for MCP clients like Cursor):**\n```bash\n# Run the built binary directly\n./mcp-server\n\n# Or run with Docker\ndocker run -i --rm -v ~/.up:/mcp/.up:ro marketplace-mcp-server:latest\n```\n\n**HTTP Transport (for web applications and REST clients):**\n```bash\n# Run the HTTP server\n./mcp-http\n\n# Or run with Docker\ndocker run --rm -p 8765:8765 -v ~/.up:/mcp/.up:ro marketplace-mcp-server-http:latest\n```\n\n### Testing\n```bash\ngo test ./...\n```\n\n\n## Architecture\n\nThe server is built using the [mcp-go](https://github.com/mark3labs/mcp-go) framework, which provides:\n- **JSON-RPC 2.0 Compliance**: Full adherence to MCP protocol specifications\n- **Multiple Transports**: Built-in support for stdio, HTTP, and SSE transports\n- **Type Safety**: Strongly typed request/response handling\n- **Middleware Support**: Extensible architecture for authentication and logging\n- **Error Handling**: Robust error handling with proper MCP error codes\n\n### Key Components\n\n- **Server**: Main MCP server using mcp-go framework\n- **Handlers**: Tool handlers for marketplace operations\n- **Auth Manager**: UP CLI authentication integration\n- **Marketplace Client**: HTTP client for Upbound Marketplace API\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests if applicable\n5. Submit a pull request\n\n## License\n\nThis project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.\n\n## Support\n\nFor issues and questions:\n- Create an issue on GitHub\n- Contact the maintainers\n\n## Examples\n\n### Finding AWS Providers\n```json\n{\n  \"name\": \"search_packages\",\n  \"arguments\": {\n    \"query\": \"aws\",\n    \"package_type\": \"provider\",\n    \"tier\": \"official\"\n  }\n}\n```\n\n### Getting Package Documentation\n```json\n{\n  \"name\": \"get_package_assets\",\n  \"arguments\": {\n    \"account\": \"upbound\",\n    \"repository\": \"provider-aws\",\n    \"version\": \"latest\",\n    \"asset_type\": \"docs\"\n  }\n}\n```\n\n### Browsing Organization Repositories\n```json\n{\n  \"name\": \"get_repositories\",\n  \"arguments\": {\n    \"account\": \"crossplane-contrib\",\n    \"filter\": \"type = 'configuration' AND public = true\"\n  }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fupbound%2Fmarketplace-mcp-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fupbound%2Fmarketplace-mcp-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fupbound%2Fmarketplace-mcp-server/lists"}