agents-council-mcp 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,226 @@
1
+ <p align="center">
2
+ <img src="./.github/agents-council.jpg" alt="Agents Council" width="1280" height="714" />
3
+ </p>
4
+
5
+ <h2 align="center">Agents Council MCP: A lightweight MCP server for shared agent feedback sessions</h2>
6
+
7
+ <p align="center">
8
+ Status: <code>Experimental</code>
9
+ </p>
10
+
11
+ ---
12
+
13
+ ## Overview
14
+
15
+ Inspired by Andrej Karpathy's [LLM Council](https://github.com/karpathy/llm-council), **Agents Council** provides an MCP-based
16
+ CLI tool that lets multiple agents communicate with each other and find solutions to your most complex tasks.
17
+
18
+ ## Features
19
+
20
+ - Agent-to-Agent communication via MCP stdio server
21
+ - Agents can join the council, submit questions and continue with their own sessions after they collected enough feedback
22
+ - Markdown or JSON text output for agent readability or automation
23
+ - Local, private state stored on disk. Can run fully offline when using local models.
24
+
25
+ ---
26
+
27
+ ## Installation
28
+
29
+ Requires Node.js or Bun
30
+ <em>For Bun, use `bunx` instead of `npx`</em>
31
+
32
+ <details>
33
+ <summary>amp</summary>
34
+ Use the amp CLI to add the Agents Council MCP server (<a href="https://ampcode.com/manual#mcp">guide</a>):
35
+
36
+ ```bash
37
+ amp mcp add council npx agents-council-mcp@latest mcp
38
+ ```
39
+
40
+ </details>
41
+
42
+ <details>
43
+ <summary>Claude Code</summary>
44
+ Use the Claude Code CLI to add the Agents Council MCP server (<a href="https://docs.anthropic.com/en/docs/claude-code/mcp">guide</a>):
45
+
46
+ ```bash
47
+ claude mcp add council npx agents-council-mcp@latest mcp
48
+ ```
49
+
50
+ or use a predefined Agent Name and enable it for all projects with user scope
51
+
52
+ ```bash
53
+ claude mcp add council -s user -- npx agents-council-mcp@latest mcp -n Opus
54
+ ```
55
+
56
+ </details>
57
+
58
+ <details>
59
+ <summary>Codex</summary>
60
+ Use the Codex CLI to add the Agents Council MCP server (<a href="https://developers.openai.com/codex/mcp/#add-a-mcp-server">guide</a>):
61
+
62
+ ```bash
63
+ codex mcp add council npx agents-council-mcp@latest mcp
64
+ ```
65
+
66
+ or with a custom Agent Name
67
+
68
+ ```bash
69
+ codex mcp add council -- npx agents-council-mcp@latest mcp -n "Codex-5.2"
70
+ ```
71
+ </details>
72
+
73
+ <details>
74
+ <summary>Copilot CLI</summary>
75
+
76
+ Start Copilot CLI:
77
+
78
+ ```
79
+ copilot
80
+ ```
81
+
82
+ Start the dialog to add a new MCP server by running:
83
+
84
+ ```
85
+ /mcp add
86
+ ```
87
+
88
+ Configure the following fields and press `CTRL+S` to save the configuration:
89
+
90
+ - **Server name:** `council`
91
+ - **Server Type:** `[1] Local`
92
+ - **Command:** `npx agents-council-mcp@latest mcp`
93
+
94
+ </details>
95
+
96
+ <details>
97
+ <summary>Gemini CLI</summary>
98
+ Use the Gemini CLI to add the Agents Council MCP server (<a href="https://geminicli.com/docs/tools/mcp-server/#adding-a-server-gemini-mcp-add">guide</a>):
99
+
100
+ ```bash
101
+ gemini mcp add council npx agents-council-mcp@latest mcp
102
+ ```
103
+
104
+ or use a predefined Agent Name and enable it for all projects with user scope
105
+
106
+ ```bash
107
+ gemini mcp add council -s user -- npx agents-council-mcp@latest mcp -n "Gemini 3 Pro"
108
+ ```
109
+
110
+ </details>
111
+
112
+ <details>
113
+ <summary>Other MCP integrations</summary>
114
+
115
+ ```json
116
+ {
117
+ "mcpServers": {
118
+ "council": {
119
+ "command": "npx",
120
+ "args": [
121
+ "agents-council-mcp@latest",
122
+ "mcp"
123
+ ]
124
+ }
125
+ }
126
+ }
127
+ ```
128
+
129
+ or use a predefined Agent Name
130
+
131
+ ```json
132
+ {
133
+ "mcpServers": {
134
+ "council": {
135
+ "command": "npx",
136
+ "args": [
137
+ "agents-council-mcp@latest",
138
+ "mcp",
139
+ "-n",
140
+ "YourAgentName"
141
+ ]
142
+ }
143
+ }
144
+ }
145
+ ```
146
+
147
+ </details>
148
+
149
+ ## Quick start
150
+
151
+ ```text
152
+ 1. Start claude in a terminal window and tell it to start the council session for tackling some complex topic
153
+ 2. Start codex or any other agent in another terminal window and tell it to join the council session and provide feedback
154
+ 3. Let claude know that the feedback is ready and can check if this resolves the problem
155
+ ```
156
+
157
+ ## What problem does this tool solve?
158
+
159
+ For most complex tasks, I want to get the feedback from a second or third agent and creating a tmux session is something not very simple for lots of users.
160
+ I wanted to create the simplest possible tool that doesn't require any technical knowledge to run
161
+
162
+ ## MCP Tools
163
+
164
+ Agents (or your MCP client) can use the following tools:
165
+
166
+ - `start_council` to open a session with a request
167
+ - `join_council` for first-time participants to fetch the request and responses
168
+ - `get_current_session_data` to poll for new responses (optionally with a cursor)
169
+ - `send_response` to reply
170
+ - `close_council` to end the session with a conclusion
171
+
172
+ ## Agent Name behavior
173
+
174
+ - Without `--agent-name`/`-n`, `start_council` and `join_council` require the `agent_name` field.
175
+ - With `--agent-name`/`-n`, tool inputs omit `agent_name` field entirely and use the provided name instead.
176
+ - The server may append `#1`, `#2`, etc. if a name is already used.
177
+
178
+ ## Response format (Experimental)
179
+
180
+ You can choose to receive JSON or Markdown responses from the Agents Council MCP server.
181
+ Some agents might work better with JSON and other with Markdown.
182
+
183
+ You can choose the format of the response by adding `-f json` or `-f markdown` argument to the MCP startup command.
184
+
185
+ ```bash
186
+ council mcp --format markdown
187
+ council mcp --format json
188
+ ```
189
+
190
+ ## State
191
+
192
+ State is stored at:
193
+
194
+ ```
195
+ ~/.agents-council/state.json
196
+ ```
197
+
198
+ Override with the following env:
199
+
200
+ ```
201
+ AGENTS_COUNCIL_STATE_PATH=/path/to/state.json
202
+ ```
203
+
204
+ ## Roadmap
205
+
206
+ - [x] v0.1.0 - MCP Council
207
+ - [ ] v0.2.0 - Chat UI
208
+ - [ ] v0.3.0 - Spawn Claude automatically
209
+ - [ ] v0.4.0 - Spawn Codex automatically
210
+ - [ ] v0.5.0 - Spawn Gemini automatically
211
+ - [ ] v0.6.0 - Multiple council sessions in parallel
212
+ - [ ] v0.7.0 - Connect to external LLMs via API Keys
213
+ - [ ] v Next - Submit your idea
214
+
215
+ ## Development
216
+
217
+ See `DEVELOPMENT.md` for local setup and workflow details.
218
+
219
+ ## Compatibility
220
+
221
+ This project is highly experimental and does not maintain backwards compatibility. Tool names, inputs, and responses
222
+ may change without legacy support; update clients alongside releases.
223
+
224
+ ## License
225
+
226
+ MIT
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "agents-council-mcp",
3
+ "version": "0.0.0",
4
+ "type": "module",
5
+ "files": [
6
+ "scripts/*.cjs",
7
+ "README.md",
8
+ "LICENSE"
9
+ ],
10
+ "bin": {
11
+ "council": "scripts/cli.cjs"
12
+ },
13
+ "optionalDependencies": {
14
+ "agents-council-mcp-darwin-arm64": "*",
15
+ "agents-council-mcp-darwin-x64": "*",
16
+ "agents-council-mcp-linux-arm64": "*",
17
+ "agents-council-mcp-linux-x64": "*",
18
+ "agents-council-mcp-windows-x64": "*"
19
+ },
20
+ "scripts": {
21
+ "build": "bun build src/cli/index.ts --compile --outfile dist/council",
22
+ "cli": "bun src/cli/index.ts",
23
+ "lint": "biome lint .",
24
+ "format": "biome format --write .",
25
+ "format:check": "biome check --formatter-enabled=true --linter-enabled=false .",
26
+ "typecheck": "tsc --noEmit",
27
+ "prepare": "husky"
28
+ },
29
+ "lint-staged": {
30
+ "package.json": [
31
+ "biome check --write --files-ignore-unknown=true"
32
+ ],
33
+ "*.json": [
34
+ "biome check --write --files-ignore-unknown=true"
35
+ ],
36
+ "src/**/*.{ts,js}": [
37
+ "biome check --write --files-ignore-unknown=true"
38
+ ]
39
+ },
40
+ "dependencies": {
41
+ "@modelcontextprotocol/sdk": "1.25.1",
42
+ "zod": "4.2.1"
43
+ },
44
+ "devDependencies": {
45
+ "@biomejs/biome": "2.3.10",
46
+ "@types/bun": "1.3.5",
47
+ "husky": "9.1.7",
48
+ "lint-staged": "16.2.7",
49
+ "typescript": "5.9.3"
50
+ },
51
+ "author": "Alex Gavrilescu (https://github.com/MrLesk)",
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "git+https://github.com/MrLesk/agents-council.git"
55
+ },
56
+ "bugs": {
57
+ "url": "https://github.com/MrLesk/agents-council/issues"
58
+ },
59
+ "homepage": "https://github.com/MrLesk/agents-council",
60
+ "keywords": [
61
+ "mcp",
62
+ "council",
63
+ "agents",
64
+ "cli",
65
+ "mcp-server"
66
+ ],
67
+ "license": "MIT"
68
+ }
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { spawn } = require("node:child_process");
4
+ const { resolveBinaryPath } = require("./resolveBinary.cjs");
5
+
6
+ let binaryPath;
7
+ try {
8
+ binaryPath = resolveBinaryPath();
9
+ } catch {
10
+ console.error(`Binary package not installed for ${process.platform}-${process.arch}.`);
11
+ process.exit(1);
12
+ }
13
+
14
+ const rawArgs = process.argv.slice(2);
15
+ const cleanedArgs = rawArgs.filter((arg) => {
16
+ if (arg === binaryPath) return false;
17
+ try {
18
+ const pattern = /node_modules[/\\]agents-council-mcp-(darwin|linux|windows)-[^/\\]+[/\\]council(\.exe)?$/i;
19
+ return !pattern.test(arg);
20
+ } catch {
21
+ return true;
22
+ }
23
+ });
24
+
25
+ const child = spawn(binaryPath, cleanedArgs, {
26
+ stdio: "inherit",
27
+ windowsHide: true,
28
+ });
29
+
30
+ child.on("exit", (code) => {
31
+ process.exit(code || 0);
32
+ });
33
+
34
+ child.on("error", (err) => {
35
+ if (err.code === "ENOENT") {
36
+ console.error(`Binary not found: ${binaryPath}`);
37
+ console.error(`Please ensure you have the correct version for your platform (${process.platform}-${process.arch})`);
38
+ } else {
39
+ console.error("Failed to start council:", err);
40
+ }
41
+ process.exit(1);
42
+ });
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { spawn } = require("node:child_process");
4
+
5
+ const platformPackages = [
6
+ "agents-council-mcp-linux-x64",
7
+ "agents-council-mcp-linux-arm64",
8
+ "agents-council-mcp-darwin-x64",
9
+ "agents-council-mcp-darwin-arm64",
10
+ "agents-council-mcp-windows-x64",
11
+ ];
12
+
13
+ const packageManager = process.env.npm_config_user_agent?.split("/")[0] || "npm";
14
+
15
+ console.log("Cleaning up platform-specific packages...");
16
+
17
+ for (const pkg of platformPackages) {
18
+ const args = packageManager === "bun" ? ["remove", "-g", pkg] : ["uninstall", "-g", pkg];
19
+
20
+ const child = spawn(packageManager, args, {
21
+ stdio: "pipe",
22
+ windowsHide: true,
23
+ });
24
+
25
+ child.on("exit", (code) => {
26
+ if (code === 0) {
27
+ console.log(`Cleaned up ${pkg}`);
28
+ }
29
+ });
30
+ }
31
+
32
+ console.log("Platform package cleanup completed.");
@@ -0,0 +1,33 @@
1
+ function mapPlatform(platform = process.platform) {
2
+ switch (platform) {
3
+ case "win32":
4
+ return "windows";
5
+ case "darwin":
6
+ case "linux":
7
+ return platform;
8
+ default:
9
+ return platform;
10
+ }
11
+ }
12
+
13
+ function mapArch(arch = process.arch) {
14
+ switch (arch) {
15
+ case "x64":
16
+ case "arm64":
17
+ return arch;
18
+ default:
19
+ return arch;
20
+ }
21
+ }
22
+
23
+ function getPackageName(platform = process.platform, arch = process.arch) {
24
+ return `agents-council-mcp-${mapPlatform(platform)}-${mapArch(arch)}`;
25
+ }
26
+
27
+ function resolveBinaryPath(platform = process.platform, arch = process.arch) {
28
+ const packageName = getPackageName(platform, arch);
29
+ const binary = `council${platform === "win32" ? ".exe" : ""}`;
30
+ return require.resolve(`${packageName}/${binary}`);
31
+ }
32
+
33
+ module.exports = { getPackageName, resolveBinaryPath };