Context7
Up-to-date docs for AI agents
作者による説明(英語の原文)
MCP-native LLM councils for debates, juries, blind panels, refinement, and custom deliberation.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
MCP_TRANSPORT, DEFAULT_BASE_URL, DEFAULT_API_KEY, ALLOW_NO_MODELS, OPENAI_API_KEY, MAX_ROUNDS, TOKEN_BUDGET, DYNAMIC_ROLES, LOG_LEVEL, ASYNC_TOOLS, TRUST_PROXY_AUTH「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"legion": {
"command": "npx",
"args": [
"-y",
"legion-mcp"
],
"env": {
"MCP_TRANSPORT": "your-value",
"DEFAULT_BASE_URL": "your-value",
"DEFAULT_API_KEY": "your-value",
"ALLOW_NO_MODELS": "your-value",
"OPENAI_API_KEY": "your-value",
"MAX_ROUNDS": "your-value",
"TOKEN_BUDGET": "your-value",
"DYNAMIC_ROLES": "your-value",
"LOG_LEVEL": "your-value",
"ASYNC_TOOLS": "your-value",
"TRUST_PROXY_AUTH": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add legion --env MCP_TRANSPORT=your-value --env DEFAULT_BASE_URL=your-value --env DEFAULT_API_KEY=your-value --env ALLOW_NO_MODELS=your-value --env OPENAI_API_KEY=your-value --env MAX_ROUNDS=your-value --env TOKEN_BUDGET=your-value --env DYNAMIC_ROLES=your-value --env LOG_LEVEL=your-value --env ASYNC_TOOLS=your-value --env TRUST_PROXY_AUTH=your-value -- npx -y legion-mcp動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"legion": {
"command": "npx",
"args": [
"-y",
"legion-mcp"
],
"env": {
"MCP_TRANSPORT": "your-value",
"DEFAULT_BASE_URL": "your-value",
"DEFAULT_API_KEY": "your-value",
"ALLOW_NO_MODELS": "your-value",
"OPENAI_API_KEY": "your-value",
"MAX_ROUNDS": "your-value",
"TOKEN_BUDGET": "your-value",
"DYNAMIC_ROLES": "your-value",
"LOG_LEVEL": "your-value",
"ASYNC_TOOLS": "your-value",
"TRUST_PROXY_AUTH": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"legion": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"legion-mcp"
],
"env": {
"MCP_TRANSPORT": "your-value",
"DEFAULT_BASE_URL": "your-value",
"DEFAULT_API_KEY": "your-value",
"ALLOW_NO_MODELS": "your-value",
"OPENAI_API_KEY": "your-value",
"MAX_ROUNDS": "your-value",
"TOKEN_BUDGET": "your-value",
"DYNAMIC_ROLES": "your-value",
"LOG_LEVEL": "your-value",
"ASYNC_TOOLS": "your-value",
"TRUST_PROXY_AUTH": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
DEFAULT_BASE_URL envMAX_ROUNDS envTOKEN_BUDGET envDYNAMIC_ROLES envLOG_LEVEL envASYNC_TOOLS envTRUST_PROXY_AUTH envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント faulkj で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:MCP_TRANSPORT, DEFAULT_API_KEY, ALLOW_NO_MODELS, OPENAI_API_KEY
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.8.0)がレジストリに届いたのは31 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:Context7, Codebase Memory, Exa
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Up-to-date docs for AI agents
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
"I am Legion, for we are many."
An MCP-native model council. Legion exposes LLMs as individual tools and orchestrates them into debates, juries, blind panels, private refinement gauntlets, workshops, and custom multi-model deliberations.
Every model is reached through the OpenAI Responses API wire format. Use OpenAI or Azure directly, route other providers through a compatible gateway (such as a LiteLLM proxy), and configure the entire council through hot-reloadable files.
flowchart LR
AI[Calling AI] -->|claude / gpt / gemini …| Legion Legion -->|Responses API| GPT[OpenAI / Azure — direct] Legion -->|Responses API| GW[Gateway e.g. LiteLLM] GW --> Claude & Gemini & Llama
Claude → claude). Each accepts a prompt plus optional context, role, system, temperature, and maxTokens.structuredContent, not the answer text. Logging goes to stderr (safe for stdio).quorum tool covers the ad-hoc multi-model case, and each preset in config/presets/ is exposed as its own enforced, pre-staffed council tool.store: false. Nothing is persisted, so there is no database and no conversation state to manage.From npm — no clone, no build:
npx legion-mcp
From a clone:
npm install
copy .env.example .env # then edit .env
All configuration lives in a config/ directory. The bundled defaults are always the base layer; a config/ folder in the current working directory is overlaid on top of them, per file:
models/, roles/, presets/, tools/): a local file overrides the bundled file of the same name; a local-only file is added; every bundled file you don't touch stays. So dropping in one config/presets/refine.json overrides just that preset — the other bundled presets remain.prompts.json, errors.json, schema.json): merged per key — bundled < local. A partial local file overrides only the keys it sets.The overlay can override or add, but not delete a bundled entry. To choose which bundled presets register as tools, use PRESETS (see below).
Installing from npm? You must supply your own model files. The bundled
config ships only key-free
*.example.jsonmodel files, which the scanner
deliberately ignores — so the bundle contributes zero real models. With no
real model file the server fails fast at startup (`No model files found
in ...
). Drop oneconfig/models/ .json` next to where you run the
server (see below) — the rest falls back to the bundled defaults.
The layout below is identical either way.
Config is read fresh when a server instance is built, never baked in at build time — but *when* that happens depends on the transport:
| Transport | Config is re-read | Effect of editing a config file |
|---|---|---|
http | per request | Live on the next call, no restart. |
stdio | once per connection | Takes effect when the client reconnects. |
HTTP builds a fresh server per request, so a dropped-in model, role, preset, or text override is picked up by the very next call. Stdio pins one server for the life of the connection, so the same edit lands when the client restarts Legion — which for most desktop MCP clients means reloading the server, not rebooting the machine.
Where this README says something is "live on the next call", read it as the HTTP behavior; over stdio it's the next connection.
config/models/*.jsonAt least one model file is required — the server fails fast without one. Each JSON file becomes a tool, named after the slugified file name (config/models/fable.json → tool fable):
{
"model": "claude-fable-5", "description": "Claude Fable — fast, creative, general purpose.", "baseUrl": "https://api.example.com", "apiKey": "[PopNx MCP ตัดค่าที่หน้าตาเหมือนกุญแจออก]" }
model (required) — the deployed model id the endpoint routes to.description — helps the calling AI pick the right model.system — optional baseline system instructions baked into every call to this model.baseUrl / apiKey — optional; omitted values fall back to DEFAULT_BASE_URL / DEFAULT_API_KEY. apiKey may reference an environment variable with the env: prefix — "apiKey": "env:GPT_KEY" reads GPT_KEY from the environment (unset/empty is a fatal startup error), so a key can stay out of the file entirely.omitParams — optional list of request params to drop for this model, e.g. ["temperature"]. The server stays provider-agnostic: it never assumes which models reject which params — you declare each model's quirks here. Useful for reasoning models and some deployments that reject temperature.reasoning — optional "minimal" | "low" | "medium" | "high", sent as reasoning.effort. Reasoning models can spend an entire maxTokens thinking and emit nothing; "low" may help leave room for an answer. The endpoint must support this parameter; it does not bypass content filtering.maxTokens — optional hard output ceiling for this model. Every request sends min(requested, ceiling), whatever the caller or preset role asked for. For models that think harder the more room they get and come back empty.Hot-drop: the directory is re-scanned per request — add or edit a model file and it's live on the next call, no restart.
Secrets & git: model files can contain API keys, so config/models/*.json is git-ignored. Copy a *.example.json (tracked, key-free, ignored by the scanner) to get started:
copy config\models\gpt.example.json config\models\gpt.json # then add your key
config/roles/*.mdOptional hot-droppable instruction files. Each .md file becomes a named role (slugified from filename). Drop a file, it's live on the next call. This repo ships skeptic.md, builder.md, judge.md, and short.md (a terse "answer immediately, no deliberation" role useful for constrained-output turns) as ready-to-use starters — edit or delete them freely (they hold no secrets).
Available selectors in tools become roleName, e.g. passing role: "skeptic" or using "model:skeptic" in quorum.models.
config/presets/*.jsonOptional hot-droppable council recipes, one JSON file per preset (named after the slugified file name, like models). Each preset becomes its own tool — drop config/presets/code_review.json and a code_review tool appears on the next request. Each preset has a description, a roles list, and optional authoritative mode / synthesizer defaults. Each role defines its behavior inline — a role's description *is* its instructions (the behavior contract); a role with no description falls back to a matching config/roles/ .md file:
{
"description": [ "Free-for-all: pit several contestants against each other, then crown a winner.", "", "Staff contestant with as many models as you like; one judge decides." ], "mode": "parallel", "synthesizer": "judge", "roles": [ { "role": "contestant", "description": "Argue why your answer beats the others.", "min": 2, "max": null }, { "role": "judge", "description": "Crown a single winner and justify it.", "min": 1, "max": 1 } ] }
The calling AI invokes the preset tool directly (e.g. code_review) and still writes the models selectors, assigning any model to any preset role. Presets are enforced: every selector must use a preset role and every role must be staffed within its cardinality, else the result is an error saying what to fix.
Keys:
| Key | Type | Default | Description | |||
|---|---|---|---|---|---|---|
description | `string \ | string[]` | required | MCP description for the preset tool. | ||
roles | PresetRole[] | required | Roles accepted by the preset. | |||
mode | `"sequential" \ | "parallel" \ | "private" \ | "independent"` | "sequential" | Controls which prior turns each round speaker sees. |
defaultRounds | positive integer | 1 | Rounds used when the call omits rounds. | |||
synthesizer | string | none | Role that produces synthesis turns. A single-seat role is neutral and sits out the rounds; a multi-seat role (max > 1 or null) plays, and its first live seat synthesizes. | |||
synthesizeEvery | `"end" \ | non-negative integer` | "end" | Runs synthesis at the end or every Nth round. | ||
eliminator | string | none | Neutral role that issues eliminations. Required with eliminateEvery. | |||
framer | string | none | Neutral role that opens and redirects the discussion. | |||
reframeEvery | `"end" \ | non-negative integer` | "end" | Reframes only at opening or every Nth round after opening. | ||
closingStatements | boolean | false | Runs a closing phase before final synthesis. | |||
eliminateEvery | non-negative integer \ | "spread" | 0 | Lets the eliminator remove one speaker every Nth round, or spread the cuts evenly. Preset-only. | ||
eliminationsOptional | boolean | false | Lets the eliminator decline an elimination. Preset-only. | |||
enterEvery | non-negative integer | 0 | Starts one speaker per team, then adds one benched speaker every Nth round. Preset-only. | |||
vote | string | none | Ballot instructions; enables anonymous voting. | |||
voteEvery | `"end" \ | non-negative integer` | "end" | Votes at the end or every Nth round. | ||
voteVisibility | `"aggregate" \ | "ballots"` | "aggregate" | Includes only totals or also anonymized ballot choices in the transcript. | ||
allowSelfVote | boolean | true | Includes each voter's own seat in its candidate menu. | |||
voteByTeam | boolean | false | Presents one choice per @team and aggregates votes by team. |
Role object keys:
| Key | Type | Default | Description |
|---|---|---|---|
role | string | required | Role name used in model:role selectors. |
| description | string \| string[] | matching role file | Inline instructions; arrays are joined with newlines. Otherwise
冒頭だけを表示しています。続きはリポジトリで読めます