关于 Chroma Package Search
Chroma Package Search 是面向编码 Agent 的代码包搜索 MCP 服务,索引多个软件包注册表中的公开包,便于按包检索代码。包索引清单可通过提交 PR 或 issue 请求扩展。
主要功能
- 01索引多个注册表中的公开代码包
- 02按包搜索和检索代码
- 03通过 PR 或 issue 申请添加包
- 04提供包版本与索引配置清单
适用场景
- 01查找依赖包的实现细节
- 02研究某个包如何实现特定功能
- 03请求将新依赖加入索引
MCP 相关
这是一个远程 MCP 服务,编码 Agent 等 MCP 客户端可连接其 URL,搜索已索引包的代码。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.trychroma.com/package-search/v1claude mcp add --transport http package-search https://mcp.trychroma.com/package-search/v1{"mcpServers":{"package-search":{"type":"http","url":"https://mcp.trychroma.com/package-search/v1"}}}在 Cursor 中打开{"servers":{"package-search":{"type":"http","url":"https://mcp.trychroma.com/package-search/v1"}}}在 VS Code 中打开{"mcpServers":{"package-search":{"type":"http","url":"https://mcp.trychroma.com/package-search/v1"}}}{"mcpServers":{"package-search":{"serverUrl":"https://mcp.trychroma.com/package-search/v1"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://mcp.trychroma.com/package-search/v1需要授权工具
3| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| filename_sha256 | string | 否 | 用于筛选的文件 SHA-256 哈希值 |
| languages | array | 否 | 用于筛选的语言。如果未提供,则搜索所有语言。 有效选项:“Rust”、“Go”、“Python”、“JavaScript”、“JSX”、“TypeScript”、“TSX”、“HTML”、“Markdown”、“YAML”、“Bash”、“SQL”、“JSON”、“Text”、“Dockerfile”、“HCL”、“Protobuf”、“Make”、“Toml”、“Jupyter Notebook” |
| package_name | string | 是 | 请求的软件包名称。请使用软件包管理器中显示的名称。 对于 Go 软件包,请使用 {org}/{repo} 格式的 GitHub 组织和仓库名称。如果不确定,请检查该软件包的 GitHub URL,并使用 URL 中的 {org}/{repo}。 |
| pattern | string | 否 | 用于在代码库中精确匹配文本的正则表达式模式。必须是有效的正则表达式。 示例:“func\\s+(get_repository|getRepository)\\s*\\(.*?\\)\\s*\\{” |
| registry_name | string | 是 | 包含所请求软件包的注册表名称。必须是以下选项之一:“crates_io”、“golang_proxy”、“npm”或“py_pi”。 |
| semantic_queries | array | 是 | 关于代码库的 1–5 个英文自然语言问题组成的数组。 示例:[“how is argmax implemented in numpy?”, “what testing patterns does axum use?”] |
| version | string | 否 | 可选:指定要搜索源代码的软件包版本。 指定时,必须采用 semver 格式:{major}.{minor}.{patch}。 否则,将使用当前可用的最新索引版本。 |
详细介绍
Chroma 软件包搜索
此仓库包含一份精选的公共代码软件包列表,Chroma 会将其索引到 Chroma 集合中。此仓库目前索引了来自各种注册表的 3K+ 个软件包。欢迎为希望纳入索引的任何依赖项创建 PR 或提出 issue!
快速链接:
如何安装
Chroma 的软件包搜索 MCP 服务是一个可供多种客户端使用的远程 MCP 服务。
| 字段 | 值 |
|---|---|
| 服务 URL | https://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 的审核速度更快。操作步骤如下:
-
Fork 此代码仓库
-
在
<registry>/<native_identifier>/下新建一个目录 -
在该目录中添加一个
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:当版本数量较多时,此字段用于限制样本大小。给定软件包的样本版本数量绝不会超过此字段指定的值。
-
更新
index.json文件,将新软件包添加到 Chroma 下一次索引任务将扫描的软件包列表中 -
创建 Pull Request,并清楚说明你添加的软件包(请使用我们的 PR 模板)
-
等待审核——Chroma 团队成员会审核你的 PR
替代方法:提交 Issue
如果你没有所有必需的配置详情(例如版本采样逻辑或标签格式),可以改为提交 Issue:
- 使用我们的 软件包请求 Issue 模板创建新 Issue
- 提供软件包名称、注册表以及其主页或 GitHub 仓库的链接
- 提供你了解的任何配置详情——提供的信息越多,我们处理请求的速度就越快
- 等待 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 团队维护,用于支持我们的代码搜索和检索能力。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。