Chroma Package Search について
Chroma Package Searchは、複数のレジストリにある公開パッケージを索引化し、コーディングエージェント向けにコードを検索するMCPサーバーです。PRやissueで索引対象の追加を申請できます。
主な機能
- 01複数レジストリの公開パッケージを索引化
- 02パッケージ単位でコードを検索・取得
- 03PRやissueでパッケージ追加を申請
- 04パッケージとバージョンの索引情報を提供
活用シーン
- 01依存パッケージの実装詳細を調べる
- 02特定機能のパッケージ内での実装を確認
- 03依存パッケージの索引登録を申請
MCP 対応
コーディングエージェントなどのMCPクライアントから接続し、索引済みパッケージのコードを検索できるリモートMCPサーバーです。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
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 を作成するか、イシューを開いてください!
クイックリンク:
インストール方法
Chroma のパッケージ検索 MCP サーバーは、さまざまなクライアントから利用できるリモート MCP サーバーです。
| フィールド | 値 |
|---|---|
| サーバー URL | https://mcp.trychroma.com/package-search/v1 |
| 認証ヘッダー名* | x-chroma-token |
| 認証ヘッダー値 | <YOUR_CHROMA_API_KEY> |
*Anthropic API では、2025-09-12 時点でカスタムヘッダーがまだサポートされていないため、代わりに Authorization ヘッダーを受け付けています。
メモ
API キーは trychroma.com/package-search で取得してください。
一般的なクライアントでの設定方法
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
Chroma Cloud API キーを使用して、次の内容を ~/.codex/config.toml ファイルに追加します:
[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 に設定ファイルがあります。
新しいパッケージの追加
推奨方法:プルリクエスト(レビューが迅速)
必要な設定情報がすべて揃っている場合は、プルリクエストの提出を強くおすすめします。PR はレビューの対応がより迅速です。手順は次のとおりです。
-
このリポジトリをフォークします
-
<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 コミット(注釈付きタグまたは軽量タグ)に解決できることを前提としています。バージョンからタグへの解決は Chroma が行いますが、この設定フィールドで指定された、存在すると把握しているタグ形式にしか解決できません。詳しくはタグ形式ガイドをご覧ください。sentinel_timestamp:インデックス化の開始時刻です。この時刻より前に公開されたバージョンは除外されます。RFC 3339/ISO 8601 に準拠したタイムスタンプを指定する必要があります。include:インデックス化するファイルを指定するglob パターンの配列です(例:["**/*.md", "**/*.ts", "**/*.js"])。version_sample_relative_size:1 回の処理でインデックス化する、パッケージの公開済みバージョン全体に対する割合です。現在、Chroma はこのリポジトリのルートにあるindex.jsonファイル内の各パッケージについて、毎日インデックスジョブを実行しています。各インデックスジョブでは、対象パッケージの利用可能なバージョンの一部を処理します。このパラメーターは、インデックスジョブの実行ごとに処理するバージョンの割合を設定します。version_sample_max_size:バージョン数が多い場合のサンプルサイズの上限です。対象パッケージのサンプルに含まれるバージョン数は、このフィールドに指定した値を超えることはありません。
-
index.json ファイルを更新し、次回のインデックスジョブで Chroma がスキャンするパッケージに新しいパッケージを追加します。
-
追加するパッケージについて明確に説明したプルリクエストを作成します(PR テンプレートを使用してください)。
-
レビューを待ちます。Chroma チームのメンバーが PR をレビューします。
別の方法:Issue を送信する
必要な設定情報(バージョンのサンプリングロジックやタグ形式など)がすべて揃っていない場合は、代わりに Issue を送信できます。
- パッケージリクエストの Issue テンプレートを使用して、新しい Issue を作成します
- パッケージ名、レジストリ、ホームページまたは GitHub リポジトリへのリンクを記載します
- 把握している設定情報をすべて記載します - 提供する情報が多いほど、リクエストを迅速に処理できます
- Chroma チームが不足している設定情報を調査し、パッケージを追加するまでお待ちください
注:チームが不足している情報を調査して設定する必要があるため、通常、Issue は PR よりも処理に時間がかかります。
レビュープロセス
- すべての PR は Chroma チームのメンバーがレビューします
- パッケージの関連性、人気度、コミュニティへの価値に基づいて評価します
- 承認されたパッケージはインデックス化され、Chroma の Package Search MCP Server から検索できるようになります
現在のインデックス
現在、リポジトリでは次のパッケージがインデックス化されています。
- NPM - JavaScript/TypeScript パッケージ
- PyPI - Python パッケージ
- crates.io - Rust クレート
- Golang Proxy - Go モジュール
- GitHub Releases - GitHub Releases 経由で配布されるパッケージ
コントリビューションガイドライン
- パッケージが公開されており、適切にメンテナンスされていることを確認してください
native_identifierがレジストリ内のパッケージ名と完全に一致することを確認してください- GitHub リポジトリが存在し、アクセス可能であることを確認してください
tag_formats配列の形式が実際の GitHub リリースタグに一致するようにしてください- 過去のインデックス化に適した開始時点として
sentinel_timestampを設定してください include配列ではグロブパターンを使用してください(例:".md"ではなく"**/*.md")- 新しいパッケージを含めるように
index.jsonファイルを更新してください - パッケージをインデックス化するべき理由を PR の説明に記載してください
モノレポに関する考慮事項
追加するリポジトリがモノレポ(複数のパッケージを含むリポジトリ)の場合、特定のパッケージのサブディレクトリのみを対象とするように、include 配列のグロブパターンを指定する必要があります。例:
{
"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 サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。