agenthub/src/index.ts
chahinebrini 5586f2c15b feat(mcp): MCP server — agenthub hub tools over stdio
Solid-collaboration foundation: agents invoke STRUCTURED tools instead of
shelling out to the CLI — so a tool can't be narrated away, hallucinated as
"doesn't exist", or mistyped. Confirmed working for Claude / Codex / Kimi
(all speak MCP).

- src/mcp/server.ts: `agenthub mcp` starts a stdio MCP server exposing 16
  tools (work, task_list/show/create/assign/claim/review/reopen/done,
  memory_add/search, handoff_read/create, decision_create, hello, status).
  Thin layer over the SAME core: proxies through the REST API (remoteClient)
  when a hub is configured — so board, SSE, status auto-refresh and CLI keep
  working unchanged — else local services. agenthub_work blocks on SSE until
  a task addressed to the agent is claimable, then returns it + its handoff.
- `agenthub mcp` command; excluded from the update-notify (stdio purity).
- Verified: initialize + tools/list (16) + tools/call (status, task_list)
  proxy to the live hub.

Does NOT change the dormant-agent reality (agents still loop agenthub_work);
it makes every interaction reliable. Bump 0.6.1 -> 0.7.0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 00:52:13 +02:00

25 lines
906 B
TypeScript

import { createProgram } from './cli/index.js';
import { maybeNotifyUpdate } from './cli/commands/update.js';
const argv = process.argv.slice(2);
if (!argv.includes('update') && !argv.includes('server') && !argv.includes('mcp')) {
maybeNotifyUpdate();
}
const program = createProgram(process.cwd());
program.parseAsync().catch((err: unknown) => {
const message = err instanceof Error ? err.message : String(err);
if (message.startsWith('AgentHub not initialized')) {
console.error(
'No AgentHub project here. Run `agenthub init`, or connect to a running server ' +
'with `agenthub init --server auto` (or set AGENTHUB_SERVER=http://<host>:3377).',
);
} else if (message.startsWith('File not found')) {
console.error('Not found. Check the ID — or you may be pointed at the wrong server.');
} else {
console.error(`Error: ${message}`);
}
process.exit(1);
});