🚀 Chroma Package Search
このリポジトリには、ChromaがChromaコレクションにインデックス化している公開コードパッケージの精選リストが含まれています。現在、このリポジトリは様々なレジストリにまたがる3K以上のパッケージをインデックス化しています。インデックス化してほしい依存関係があれば、PRを作成するか、イシューを開いてください!
クイックリンク:
🚀 クイックスタート
📦 インストール
ChromaのPackage Search MCPサーバーは、多くのクライアントから利用できるリモートMCPサーバーです。
| フィールド |
値 |
| サーバーURL |
https://mcp.trychroma.com/package-search/v1 |
| 認証ヘッダー名* |
x-chroma-token |
| 認証ヘッダー値 |
<YOUR_CHROMA_API_KEY> |
*Anthropic APIの場合、2025年9月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設定に以下を追加します。追加後、サーバーの「開始」をクリックしてください。
{
"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 (via 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 # インデックス化パイプラインを通過した、または通過中のすべてのパッケージを列挙する
├── versions.json # 現在インデックス化されているすべてのパッケージとバージョンを列挙する
├── npm/ # npmパッケージ
│ ├── react/
│ │ └── config.json
│ ├── vue/
│ │ └── config.json
│ └── ...
├── pypi/ # PyPIパッケージ
│ ├── requests/
│ │ └── config.json
│ └── ...
├── crates_io/ # Rustパッケージ
│ ├── serde/
│ │ └── config.json
│ └── ...
└── go/ # Goパッケージ
├── github.com/
│ └── gin-gonic/
│ └── gin/
│ └── config.json
└── ...
各パッケージには、<registry>/<native_identifier>/config.jsonに独自の設定ファイルがあります。
➕ 新しいパッケージの追加
推奨方法: プルリクエスト (レビューが速い)
必要なすべての設定情報がある場合は、プルリクエストの提出を強くお勧めします。プルリクエストはレビューのターンアラウンド時間が短いです。手順は以下の通りです。
-
このリポジトリをフォークする
-
<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内のインデックス化されたレコードをクエリするために使用されるため、一般的にはパッケージの一般的な名前またはその変形にする必要があります。コレクション名のプレフィックスは、レジストリ内でグローバルに一意である必要があります。つまり、同じレジストリ内の2つのパッケージが同じコレクション名のプレフィックスを持つことはできません。
repo: パッケージのソースコードが管理されているGitHubリポジトリ。オーナーのユーザー名または組織名の後にスラッシュとリポジトリ名を続けたものを指定します。
registry: パッケージのバージョンが公開されるレジストリ。"npm"、"py_pi"、"crates_io"、"golang_proxy"、"github_releases"のいずれかである必要があります。
tag_formats: インデックス化したいパッケージのバージョンのすべての可能なタグ形式を列挙するgitタグ形式の配列。Chromaは、パッケージのバージョンをタグ付き(注釈付きまたは軽量)のgitコミットに解決できることを前提としています。バージョンからタグへの解決はChromaが行いますが、解決できるのはこの設定フィールドから取得した既知のタグ形式のみです。詳細については、タグ形式ガイドを参照してください。
sentinel_timestamp: 最も古いインデックス化時間。これより前に公開されたバージョンは除外されます。RFC 3339/ISO 8601に準拠したタイムスタンプである必要があります。
include: インデックス化するファイルのグロブパターンの配列(例: ["**/*.md", "**/*.ts", "**/*.js"])。
version_sample_relative_size: 一度にインデックス化するパッケージのすべての公開バージョンの割合。現在、Chromaはこのリポジトリのルートにあるindex.jsonファイル内の各パッケージについて毎日インデックスジョブを実行します。各インデックスジョブは、特定のパッケージの利用可能なバージョンのサブセットで動作します。このパラメータは、各インデックスジョブ実行時のサブセットのサイズを制御します。
version_sample_max_size: バージョンが多い場合のサンプルサイズを制限するフィールド。特定のパッケージのサンプル内のバージョン数は、このフィールドに指定された値を超えることはありません。
-
index.jsonファイルを更新して、次のインデックスジョブでChromaがスキャンするパッケージに新しいパッケージを含める
-
プルリクエストを作成して、追加するパッケージについて明確な説明を記載する(PRテンプレートを使用する)
-
レビューを待つ - ChromaチームのメンバーがあなたのPRをレビューします
代替方法: イシューの提出
必要なすべての設定詳細(バージョンサンプリングロジックやタグ形式など)がない場合は、代わりにイシューを提出することができます。
- パッケージリクエストイシューテンプレートを使用して新しいイシューを作成する
- パッケージ名、レジストリ、およびそのホームページまたはGitHubリポジトリへのリンクを提供する
- 知っている設定詳細を含める - 提供する情報が多いほど、リクエストを処理する速度が速くなります
- Chromaチームが不足している設定詳細を収集し、パッケージを追加するのを待つ
注意: イシューは、チームが不足している詳細を調査して設定する必要があるため、一般的にPRよりも処理時間が長くなります。
🔍 レビュープロセス
- すべてのプルリクエストはChromaチームのメンバーによってレビューされます。
- パッケージは、関連性、人気、およびコミュニティ価値に基づいて評価されます。
- 承認されたパッケージはインデックス化され、Chromaのパッケージ検索MCPサーバーを通じて検索可能になります。
📋 現在のインデックス
このリポジトリは現在、以下のソースからのパッケージをインデックス化しています。
- 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チームによって維持されており、コード検索と取得機能をサポートしています。