mcpField
C
Chroma Package Search

Chroma Package Search

远程服务
github.com/chroma-core搜索与检索5424 周前更新
代码仓库

关于 Chroma Package Search

Chroma Package Search 是面向编码 Agent 的代码包搜索 MCP 服务,索引多个软件包注册表中的公开包,便于按包检索代码。包索引清单可通过提交 PR 或 issue 请求扩展。

主要功能

  1. 01索引多个注册表中的公开代码包
  2. 02按包搜索和检索代码
  3. 03通过 PR 或 issue 申请添加包
  4. 04提供包版本与索引配置清单

适用场景

  1. 01查找依赖包的实现细节
  2. 02研究某个包如何实现特定功能
  3. 03请求将新依赖加入索引

MCP 相关

这是一个远程 MCP 服务,编码 Agent 等 MCP 客户端可连接其 URL,搜索已索引包的代码。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://mcp.trychroma.com/package-search/v1
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://mcp.trychroma.com/package-search/v1需要授权

工具

3
参数类型必填说明
filename_sha256string否用于筛选的文件 SHA-256 哈希值
languagesarray否用于筛选的语言。如果未提供,则搜索所有语言。 有效选项:“Rust”、“Go”、“Python”、“JavaScript”、“JSX”、“TypeScript”、“TSX”、“HTML”、“Markdown”、“YAML”、“Bash”、“SQL”、“JSON”、“Text”、“Dockerfile”、“HCL”、“Protobuf”、“Make”、“Toml”、“Jupyter Notebook”
package_namestring是请求的软件包名称。请使用软件包管理器中显示的名称。 对于 Go 软件包,请使用 {org}/{repo} 格式的 GitHub 组织和仓库名称。如果不确定,请检查该软件包的 GitHub URL,并使用 URL 中的 {org}/{repo}。
patternstring否用于在代码库中精确匹配文本的正则表达式模式。必须是有效的正则表达式。 示例:“func\\s+(get_repository|getRepository)\\s*\\(.*?\\)\\s*\\{”
registry_namestring是包含所请求软件包的注册表名称。必须是以下选项之一:“crates_io”、“golang_proxy”、“npm”或“py_pi”。
semantic_queriesarray是关于代码库的 1–5 个英文自然语言问题组成的数组。 示例:[“how is argmax implemented in numpy?”, “what testing patterns does axum use?”]
versionstring否可选:指定要搜索源代码的软件包版本。 指定时,必须采用 semver 格式:{major}.{minor}.{patch}。 否则,将使用当前可用的最新索引版本。

详细介绍

Chroma 软件包搜索

此仓库包含一份精选的公共代码软件包列表,Chroma 会将其索引到 Chroma 集合中。此仓库目前索引了来自各种注册表的 3K+ 个软件包。欢迎为希望纳入索引的任何依赖项创建 PR 或提出 issue!

快速链接:

如何安装

Chroma 的软件包搜索 MCP 服务是一个可供多种客户端使用的远程 MCP 服务。

字段值
服务 URLhttps://mcp.trychroma.com/package-search/v1
身份验证标头名称*x-chroma-token
身份验证标头值<YOUR_CHROMA_API_KEY>

*对于 Anthropic API,由于截至 2025-09-12 尚不支持自定义标头,因此我们改用 Authorization 标头。

说明

在 trychroma.com/package-search 获取 API 密钥

在常见客户端中配置
Cursor

创建或编辑 ~/.cursor/mcp.json:

{
  "mcpServers": {
    "package-search": {
      "transport": "streamable_http",
      "url": "https://mcp.trychroma.com/package-search/v1",
      "headers": {
        "x-chroma-token": "<YOUR_CHROMA_API_KEY>"
      }
    }
  }
}
VS Code(Copilot Chat MCP)

创建或编辑 .vscode/mcp.json:

{
  "servers": {
    "package-search": {
      "type": "http",
      "url": "https://mcp.trychroma.com/package-search/v1",
      "headers": {
        "x-chroma-token": "<YOUR_CHROMA_API_KEY>"
      }
    }
  }
}
Windsurf

打开 Windsurf MCP 设置并编辑,添加以下内容:

{
  "mcpServers": {
    "package-search": {
      "serverUrl": "https://mcp.trychroma.com/package-search/v1",
      "headers": {
        "x-chroma-token": "<YOUR_CHROMA_API_KEY>"
      }
    }
  }
}
Warp

将以下内容添加到 Warp MCP 配置中。添加后,请确保点击服务上的“Start”。

{
    "package-search": {
      "command": "npx",
      "args": ["mcp-remote", "https://mcp.trychroma.com/package-search/v1", "--header", "x-chroma-token: ${X_CHROMA_TOKEN}"],
      "env": {
        "X_CHROMA_TOKEN": "<YOUR_CHROMA_API_KEY>"
      }
    }
}
Codex

将以下内容添加到 ~/.codex/config.toml 文件中,并填入你的 Chroma Cloud API 密钥:

[mcp_servers.package-search]
command = "npx"
args = ["mcp-remote", "https://mcp.trychroma.com/package-search/v1", "--header", "x-chroma-token: ${X_CHROMA_TOKEN}"]
env = { X_CHROMA_TOKEN = "<YOUR_CHROMA_API_KEY>" }
Claude Code

在终端中运行以下命令:

claude mcp add --transport http package-search https://mcp.trychroma.com/package-search/v1 --header "x-chroma-token: <YOUR_CHROMA_API_KEY>"
OpenAI SDK(Python)
from openai import OpenAI

client = OpenAI(api_key="<YOUR_OPENAI_API_KEY>")

resp = client.responses.create(
    model="gpt-5",
    input="Explain how colorlog implements testing in python",
    tools=[
        {
            "type": "mcp",
            "server_label": "package-search",
            "server_url": "https://mcp.trychroma.com/package-search/v1",
            "headers": {"x-chroma-token": "<YOUR_CHROMA_API_KEY>"},
            "require_approval": "never"
        }
    ],
)
print(resp)
Anthropic SDK(Python)
import anthropic

client = anthropic.Anthropic(api_key="<YOUR_ANTHROPIC_API_KEY>")

response = client.beta.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1000,
    messages=[{"role": "user", "content": "Explain how colorlog implements testing in python"}],
    mcp_servers=[
        {
            "type": "url",
            "url": "https://mcp.trychroma.com/package-search/v1",
            "name": "package-search",
            "authorization_token": "<YOUR_CHROMA_API_KEY>"
        }
    ],
    betas=["mcp-client-2025-04-04"],
)
print(response)
Google Gemini SDK(Python)
import asyncio
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
from google import genai

client = genai.Client(api_key="<YOUR_GEMINI_API_KEY>")

async def run():
    async with streamablehttp_client(
        "https://mcp.trychroma.com/package-search/v1",
        headers={"x-chroma-token": "<YOUR_CHROMA_API_KEY>"},
    ) as (read, write, _):
        async with ClientSession(read, write) as session:
            await session.initialize()
            prompt = "what logging levels are available in uber's zap go module?"
            response = await client.aio.models.generate_content(
                model="gemini-2.5-flash",
                contents=prompt,
                config=genai.types.GenerateContentConfig(temperature=0, tools=[session]),
            )
            print(response.text if hasattr(response, "text") else response)
asyncio.run(run())
MCP SDK(Python)
import asyncio
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

async def main():
    async with streamablehttp_client(
        "https://mcp.trychroma.com/package-search/v1",
        headers={"x-chroma-token": "<YOUR_CHROMA_API_KEY>"},
    ) as (read_stream, write_stream, _):
        async with ClientSession(read_stream, write_stream) as session:
            await session.initialize()
            tools = await session.list_tools()
            result = await session.call_tool(
                name="package_search_grep",
                arguments={"package_name": "colorlog", "registry_name": "py_pi", "pattern": "\bclass\b"},
            )
            print(f"Got result: {result}")
            print(f"Available tools: {[t.name for t in tools.tools]}")

asyncio.run(main())
Ollama(通过 ollmcp)

创建 mcp_config.json:

{
  "mcpServers": {
    "package-search": {
      "type": "streamable_http",
      "url": "https://mcp.trychroma.com/package-search/v1",
      "headers": { "x-chroma-token": "<YOUR_CHROMA_API_KEY>" },
      "disabled": false
    }
  }
}

运行:

ollmcp --servers-json /path/to/mcp_config.json --model qwen2.5
Open Code

添加到 ~/.config/opencode/opencode.json::

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "package-search": {
      "type": "remote",
      "url": "https://mcp.trychroma.com/package-search/v1",
      "enabled": true,
      "headers": { "x-chroma-token": "<YOUR_CHROMA_API_KEY>" }
    }
  }
}

用途

此仓库是 Chroma 为代码搜索和检索建立索引的软件包的权威信息来源。

仓库结构

仓库结构如下:

package-search/
├── index.json                   # Enumerates all packages that have been or are being run through the indexing pipeline
├── versions.json                # Enumerates all presently indexed packages and versions
├── npm/                         # npm packages
│   ├── react/
│   │   └── config.json
│   ├── vue/
│   │   └── config.json
│   └── ...
├── pypi/                        # PyPI packages
│   ├── requests/
│   │   └── config.json
│   └── ...
├── crates_io/                   # Rust packages
│   ├── serde/
│   │   └── config.json
│   └── ...
└── go/                          # Go packages
    ├── github.com/
    │   └── gin-gonic/
    │       └── gin/
    │           └── config.json
    └── ...

每个软件包都有自己的配置文件,位于 <registry>/<native_identifier>/config.json。

添加新软件包

首选方式:提交 Pull Request(审核更快)

如果你已掌握所有必需的配置信息,我们强烈建议提交 Pull Request,因为 PR 的审核速度更快。操作步骤如下:

  1. Fork 此代码仓库

  2. 在 <registry>/<native_identifier>/ 下新建一个目录

  3. 在该目录中添加一个 config.json 文件,格式如下:

    {
      "native_identifier": "chromadb",
      "collection_name_prefix": "chromadb",
      "repo": "chroma-core/chroma",
      "registry": "py_pi",
      "tag_formats": ["{major}.{minor}.{patch}"],
      "sentinel_timestamp": "2024-01-01T00:00:00Z",
      "include": ["**/*.md", "**/*.py", "**/*.rs"]
    }
    

    必填字段:

    • native_identifier:托管该软件包的注册表使用的标识符。对于大多数注册表,这应是软件包的常用名称。对于 GitHub Releases,这应是所有者用户或组织的用户名,后接正斜杠,再接代码仓库名称(例如,chroma-core/code-collections)。对于 Golang 模块,这应是完整的模块路径(例如,github.com/stretchr/testify/)。
    • collection_name_prefix:在为此软件包创建的 Chroma 集合名称中,位于版本号前面的文本。集合名称格式为 <collection_name_prefix>_<version>。集合名称用于查询 Chroma 中已建立索引的记录,因此通常应使用软件包的常用名称或其某种变体。请注意,集合名称前缀在同一注册表内必须全局唯一。也就是说,同一注册表中的任何两个软件包都不能使用相同的集合名称前缀。
    • repo:维护该软件包源代码的 GitHub 代码仓库。请填写所有者用户或组织的用户名,后接正斜杠,再接代码仓库名称。
    • registry:发布该软件包各版本的注册表。必须是 "npm"、"py_pi"、"crates_io"、"golang_proxy"、"github_releases"、"terraform" 或 "ruby_gems" 之一。
    • tag_formats:Git 标签格式数组,列出你希望建立索引的软件包版本的所有可能标签格式。请注意,Chroma 假定软件包版本可以解析为带标签的 Git 提交;标签可以是附注标签或轻量标签。我们会为你处理版本到标签的解析,但只能解析为我们已知的标签格式,而这些格式由此配置字段提供。更多信息请参阅 标签格式指南。
    • sentinel_timestamp:最早的索引时间;在此时间之前发布的版本将被排除。必须是符合 RFC 3339/ISO 8601 标准的时间戳。
    • include:用于指定要建立索引的文件的 glob 模式数组(例如,["**/*.md", "**/*.ts", "**/*.js"])。
    • version_sample_relative_size:单次索引过程中要建立索引的软件包所有已发布版本所占的比例。目前,Chroma 每天都会为本代码仓库根目录 index.json 文件中的每个软件包运行一次索引任务。每个索引任务只会处理给定软件包的部分可用版本。此参数用于控制每次索引任务运行时该子集的大小。
    • version_sample_max_size:当版本数量较多时,此字段用于限制样本大小。给定软件包的样本版本数量绝不会超过此字段指定的值。
  4. 更新 index.json 文件,将新软件包添加到 Chroma 下一次索引任务将扫描的软件包列表中

  5. 创建 Pull Request,并清楚说明你添加的软件包(请使用我们的 PR 模板)

  6. 等待审核——Chroma 团队成员会审核你的 PR

替代方法:提交 Issue

如果你没有所有必需的配置详情(例如版本采样逻辑或标签格式),可以改为提交 Issue:

  1. 使用我们的 软件包请求 Issue 模板创建新 Issue
  2. 提供软件包名称、注册表以及其主页或 GitHub 仓库的链接
  3. 提供你了解的任何配置详情——提供的信息越多,我们处理请求的速度就越快
  4. 等待 Chroma 团队收集缺失的配置详情并添加该软件包

注意:与 PR 相比,Issue 通常需要更长的处理时间,因为我们的团队需要研究并配置缺失的详情。

审核流程

  • 所有 PR 均由 Chroma 团队成员审核
  • 我们会根据相关性、受欢迎程度和社区价值评估软件包
  • 被接受的软件包将被编入索引,并可通过 Chroma 的 Package Search MCP Server 搜索

当前索引

该仓库目前为以下来源的软件包编制索引:

  • NPM——JavaScript/TypeScript 软件包
  • PyPI——Python 软件包
  • crates.io——Rust crate
  • Golang Proxy——Go 模块
  • GitHub Releases——通过 GitHub Releases 分发的软件包

贡献指南

  • 确保软件包可公开获取且维护良好
  • 确认 native_identifier 与注册表中的软件包名称完全一致
  • 确认 GitHub 仓库存在且可访问
  • 设置 tag_formats 数组,使其与实际的 GitHub 发布标签格式一致
  • 将 sentinel_timestamp 设置为合理的历史索引起始时间
  • 在 include 数组中使用 glob 模式(例如,使用 "**/*.md" 而不是 ".md")
  • 更新 index.json 文件以包含新软件包
  • 在 PR 描述中说明应将该软件包编入索引的原因

单体仓库注意事项

如果要添加的仓库是单体仓库(包含多个软件包),则必须设置 include 数组中的 glob 模式,使其仅匹配特定软件包的子目录。例如:

{
  "native_identifier": "my-package",
  "collection_name_prefix": "my-package",
  "repo": "owner/monorepo",
  "registry": "npm",
  "tag_formats": ["v{major}.{minor}.{patch}"],
  "sentinel_timestamp": "2024-01-01T00:00:00Z",
  "include": ["my-package/**/*.md", "my-package/**/*.ts", "my-package/**/*.js"]
}

这样可确保只对 my-package/ 目录中的文件编制索引,而不是整个单体仓库。


该仓库由 Chroma 团队维护,用于支持我们的代码搜索和检索能力。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。