@neiracore/mcp-server 1.2.1 → 2.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/dist/index.js +560 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +560 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/auth/credentials.ts","../src/auth/context.ts","../src/utils/format.ts","../src/utils/errors.ts","../src/tools/register.ts","../src/tools/search.ts","../src/tools/status.ts","../src/tools/connect.ts","../src/tools/send-message.ts","../src/tools/create-group.ts","../src/tools/join-group.ts","../src/tools/propose.ts","../src/tools/list-channels.ts","../src/tools/index.ts","../src/resources/agent-profile.ts","../src/resources/groups.ts","../src/resources/inbox.ts","../src/resources/channels.ts","../src/resources/index.ts","../src/server.ts","../src/index.ts"],"names":["ACSPClient","InputSchema","z"],"mappings":"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","file":"index.mjs","sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport interface Credentials {\n version: number;\n aid: string;\n login_key: string;\n private_key: string;\n agent_name: string;\n capabilities: string[];\n base_url: string;\n created_at: string;\n}\n\n// ── Paths ────────────────────────────────────────────────────────────────────\n\nconst NEIRACORE_DIR = path.join(os.homedir(), \".neiracore\");\nconst CREDENTIALS_FILE = path.join(NEIRACORE_DIR, \"credentials.json\");\n\nexport function getCredentialsPath(): string {\n return CREDENTIALS_FILE;\n}\n\n// ── Load ─────────────────────────────────────────────────────────────────────\n\n/**\n * Load credentials from ~/.neiracore/credentials.json.\n * Returns null if file does not exist or is invalid.\n */\nexport function loadCredentials(): Credentials | null {\n try {\n if (!fs.existsSync(CREDENTIALS_FILE)) {\n return null;\n }\n\n const raw = fs.readFileSync(CREDENTIALS_FILE, \"utf-8\");\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n\n // Validate required fields\n if (\n typeof parsed.aid !== \"string\" ||\n typeof parsed.private_key !== \"string\" ||\n typeof parsed.agent_name !== \"string\"\n ) {\n process.stderr.write(\n `[neiracore-mcp] Warning: credentials.json is malformed, ignoring\\n`,\n );\n return null;\n }\n\n return {\n version: typeof parsed.version === \"number\" ? parsed.version : 1,\n aid: parsed.aid as string,\n login_key: (parsed.login_key as string) ?? \"\",\n private_key: parsed.private_key as string,\n agent_name: parsed.agent_name as string,\n capabilities: Array.isArray(parsed.capabilities)\n ? (parsed.capabilities as string[])\n : [],\n base_url:\n (parsed.base_url as string) ?? \"https://neiracore.com\",\n created_at:\n (parsed.created_at as string) ?? new Date().toISOString(),\n };\n } catch {\n return null;\n }\n}\n\n// ── Save ─────────────────────────────────────────────────────────────────────\n\n/**\n * Save credentials to ~/.neiracore/credentials.json with chmod 600.\n */\nexport function saveCredentials(creds: Credentials): void {\n // Ensure directory exists with 0700\n if (!fs.existsSync(NEIRACORE_DIR)) {\n fs.mkdirSync(NEIRACORE_DIR, { recursive: true, mode: 0o700 });\n }\n\n const json = JSON.stringify(creds, null, 2);\n fs.writeFileSync(CREDENTIALS_FILE, json, { encoding: \"utf-8\", mode: 0o600 });\n\n // Ensure permissions on existing file (writeFileSync mode only applies on create)\n try {\n fs.chmodSync(CREDENTIALS_FILE, 0o600);\n } catch {\n // Windows doesn't support chmod — skip silently\n }\n}\n\n// ── Login Key Encoding ───────────────────────────────────────────────────────\n\n/**\n * Encode AID + private key into nk_ login key format.\n */\nexport function encodeLoginKey(aid: string, privateKey: string): string {\n const payload = JSON.stringify({ aid, pk: privateKey });\n const b64 = Buffer.from(payload).toString(\"base64url\");\n return `nk_${b64}`;\n}\n","import { ACSPClient } from \"@neiracore/acsp\";\nimport {\n loadCredentials,\n saveCredentials,\n encodeLoginKey,\n type Credentials,\n} from \"./credentials.js\";\n\n// ── Environment Variable Override ────────────────────────────────────────────\n\nconst ENV_LOGIN_KEY = process.env.NEIRACORE_LOGIN_KEY;\nconst ENV_BASE_URL = process.env.NEIRACORE_BASE_URL;\nconst ENV_LOG_LEVEL = process.env.NEIRACORE_LOG_LEVEL ?? \"info\";\n\ntype LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\n// ── ServerContext ────────────────────────────────────────────────────────────\n\n/**\n * Mutable singleton holding the authenticated ACSP client.\n * Passed to all tool/resource handlers.\n */\nexport class ServerContext {\n client: ACSPClient | null = null;\n credentials: Credentials | null = null;\n\n private readonly logLevel: LogLevel;\n private readonly baseUrl: string;\n\n constructor() {\n this.logLevel = ([\"debug\", \"info\", \"warn\", \"error\"].includes(ENV_LOG_LEVEL)\n ? ENV_LOG_LEVEL\n : \"info\") as LogLevel;\n this.baseUrl = ENV_BASE_URL ?? \"https://neiracore.com\";\n }\n\n /**\n * Check if the server has valid credentials and an active client.\n */\n isAuthenticated(): boolean {\n return this.client !== null && this.credentials !== null;\n }\n\n /**\n * Get authenticated client or throw a user-friendly error.\n */\n requireAuth(): ACSPClient {\n if (!this.client) {\n throw new NotAuthenticatedError();\n }\n return this.client;\n }\n\n /**\n * Get the current AID or null.\n */\n getAid(): string | null {\n return this.credentials?.aid ?? null;\n }\n\n /**\n * Hot-reload credentials after registration (no server restart needed).\n */\n setCredentials(creds: Credentials): void {\n this.credentials = creds;\n this.client = new ACSPClient({\n aid: creds.aid,\n privateKey: creds.private_key,\n baseUrl: creds.base_url || this.baseUrl,\n });\n this.log(\"info\", `Authenticated as ${creds.agent_name} (${creds.aid.slice(0, 8)}...)`);\n }\n\n /**\n * Log to stderr (stdout is reserved for MCP transport).\n */\n log(level: LogLevel, message: string): void {\n const levels: LogLevel[] = [\"debug\", \"info\", \"warn\", \"error\"];\n if (levels.indexOf(level) < levels.indexOf(this.logLevel)) return;\n const ts = new Date().toISOString();\n process.stderr.write(`[neiracore-mcp] [${level.toUpperCase()}] ${ts} ${message}\\n`);\n }\n\n /**\n * Get base URL for API calls.\n */\n getBaseUrl(): string {\n return this.baseUrl;\n }\n}\n\n// ── Custom Error ─────────────────────────────────────────────────────────────\n\nexport class NotAuthenticatedError extends Error {\n constructor() {\n super(\"Not authenticated. Run neiracore_register first to create an agent.\");\n this.name = \"NotAuthenticatedError\";\n }\n}\n\n// ── Login Key Decoder ────────────────────────────────────────────────────────\n\n/**\n * Decode nk_ login key into aid + private key.\n * Format: nk_ + base64url({ aid: hex50, pk: hex64 })\n */\nfunction decodeLoginKey(loginKey: string): { aid: string; privateKey: string } | null {\n if (!loginKey || !loginKey.startsWith(\"nk_\")) return null;\n try {\n const b64 = loginKey.slice(3);\n const json = Buffer.from(b64, \"base64url\").toString(\"utf-8\");\n const payload = JSON.parse(json) as { aid?: string; pk?: string };\n if (!payload.aid || !payload.pk) return null;\n if (!/^[0-9a-f]{50}$/i.test(payload.aid)) return null;\n if (!/^[0-9a-f]{64}$/i.test(payload.pk)) return null;\n return {\n aid: payload.aid.toLowerCase(),\n privateKey: payload.pk.toLowerCase(),\n };\n } catch {\n return null;\n }\n}\n\n// ── Factory ──────────────────────────────────────────────────────────────────\n\n/**\n * Create ServerContext, loading credentials from env or file.\n * Priority: NEIRACORE_LOGIN_KEY env > ~/.neiracore/credentials.json > unauthenticated.\n */\nexport async function createServerContext(): Promise<ServerContext> {\n const ctx = new ServerContext();\n\n // Priority 1: Environment variable login key\n if (ENV_LOGIN_KEY) {\n ctx.log(\"debug\", \"Using NEIRACORE_LOGIN_KEY from environment\");\n try {\n const decoded = decodeLoginKey(ENV_LOGIN_KEY);\n if (decoded) {\n const client = new ACSPClient({\n aid: decoded.aid,\n privateKey: decoded.privateKey,\n baseUrl: ctx.getBaseUrl(),\n });\n ctx.client = client;\n ctx.credentials = {\n version: 1,\n aid: decoded.aid,\n login_key: ENV_LOGIN_KEY,\n private_key: decoded.privateKey,\n agent_name: \"env-agent\",\n capabilities: [],\n base_url: ctx.getBaseUrl(),\n created_at: new Date().toISOString(),\n };\n ctx.log(\"info\", `Authenticated via env: ${decoded.aid.slice(0, 8)}...`);\n return ctx;\n } else {\n ctx.log(\"warn\", \"NEIRACORE_LOGIN_KEY invalid format\");\n }\n } catch (err) {\n ctx.log(\"warn\", `Failed to use NEIRACORE_LOGIN_KEY: ${String(err)}`);\n }\n }\n\n // Priority 2: Credentials file\n const creds = loadCredentials();\n if (creds) {\n ctx.log(\"debug\", \"Loaded credentials from ~/.neiracore/credentials.json\");\n try {\n ctx.setCredentials(creds);\n } catch (err) {\n ctx.log(\"warn\", `Failed to init client from credentials: ${String(err)}`);\n }\n return ctx;\n }\n\n // Priority 3: No credentials — unregistered mode\n ctx.log(\"info\", \"No credentials found. Running in unregistered mode (only neiracore_register available).\");\n return ctx;\n}\n","import type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\n\n/**\n * Create a successful text result for MCP tools.\n */\nexport function textResult(text: string): CallToolResult {\n return {\n content: [{ type: \"text\", text }],\n };\n}\n\n/**\n * Create an error text result for MCP tools.\n */\nexport function errorResult(text: string): CallToolResult {\n return {\n content: [{ type: \"text\", text: `❌ ${text}` }],\n isError: true,\n };\n}\n\n/**\n * Format a key-value section for display.\n */\nexport function formatSection(\n title: string,\n fields: Array<[string, string | number | undefined | null]>,\n): string {\n const lines = [`${title}\\n`];\n const maxLabel = Math.max(...fields.map(([k]) => k.length));\n\n for (const [key, value] of fields) {\n if (value === undefined || value === null) continue;\n lines.push(` ${key.padEnd(maxLabel + 2)}${value}`);\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format capabilities as a comma-separated string.\n */\nexport function formatCapabilities(caps: string[]): string {\n return caps.join(\", \");\n}\n\n/**\n * Truncate a string to max length with ellipsis.\n */\nexport function truncate(s: string, max: number): string {\n return s.length <= max ? s : s.slice(0, max - 1) + \"…\";\n}\n","import { ACSPError } from \"@neiracore/acsp\";\nimport { NotAuthenticatedError } from \"../auth/context.js\";\nimport { errorResult } from \"./format.js\";\nimport type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\n\n/**\n * Map ACSP SDK errors and other exceptions to user-friendly MCP error results.\n */\nexport function handleToolError(err: unknown): CallToolResult {\n // Not authenticated\n if (err instanceof NotAuthenticatedError) {\n return errorResult(\n \"No credentials found. Run neiracore_register first to create an agent and get started.\",\n );\n }\n\n // ACSP API errors\n if (err instanceof ACSPError) {\n return mapACSPError(err);\n }\n\n // Network errors\n if (err instanceof TypeError && String(err.message).includes(\"fetch\")) {\n return errorResult(\"Cannot reach neiracore.com. Check your network connection.\");\n }\n\n // Generic errors\n if (err instanceof Error) {\n return errorResult(`Unexpected error: ${err.message}`);\n }\n\n return errorResult(\"An unknown error occurred.\");\n}\n\n/**\n * Map ACSP HTTP error codes to MCP-friendly messages.\n */\nfunction mapACSPError(err: ACSPError): CallToolResult {\n switch (err.status) {\n case 400:\n return errorResult(`Validation error: ${err.message}`);\n\n case 401:\n case 403:\n return errorResult(\n `Authentication error: ${err.message}. Try running neiracore_register to re-register.`,\n );\n\n case 404:\n return errorResult(`Not found: ${err.message}`);\n\n case 409:\n return errorResult(`Conflict: ${err.message}`);\n\n case 429:\n return errorResult(\n `Rate limited: ${err.message}. Please wait before retrying.`,\n );\n\n case 500:\n case 502:\n case 503:\n return errorResult(\n `Neiracore server error (${err.status}): ${err.message}. Try again in a moment.`,\n );\n\n default:\n if (err.code === \"TIMEOUT\") {\n return errorResult(\"Request timed out. Neiracore may be experiencing high load.\");\n }\n return errorResult(`ACSP error (${err.status}): ${err.message}`);\n }\n}\n","import { z } from \"zod\";\nimport { ACSPClient } from \"@neiracore/acsp\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport {\n saveCredentials,\n encodeLoginKey,\n type Credentials,\n} from \"../auth/credentials.js\";\nimport { textResult, formatSection, formatCapabilities } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n agent_name: z\n .string()\n .min(1, \"Agent name is required\")\n .max(128, \"Agent name must be 128 characters or less\"),\n capabilities: z\n .array(z.string().max(256, \"Each capability must be 256 chars or less\"))\n .min(1, \"At least one capability is required\")\n .max(50, \"Maximum 50 capabilities\"),\n description: z\n .string()\n .max(1024, \"Description must be 1024 characters or less\")\n .optional(),\n};\n\n/**\n * Register neiracore_register tool.\n * Creates a new agent, generates Ed25519 keypair, saves credentials.\n */\nexport function registerTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_register\",\n \"Register a new AI agent on the Neiracore network. Generates Ed25519 keypair, creates AID, saves credentials locally. After registration, all other tools become available.\",\n InputSchema,\n async (args) => {\n try {\n // Warn if already registered\n if (ctx.isAuthenticated()) {\n return textResult(\n `⚠️ Already registered as ${ctx.credentials!.agent_name} (${ctx.credentials!.aid.slice(0, 8)}...).\\n` +\n `To register a new agent, delete ~/.neiracore/credentials.json first.`,\n );\n }\n\n ctx.log(\"info\", `Registering agent: ${args.agent_name}`);\n\n // Create a fresh client for registration (no auth needed)\n const client = new ACSPClient({ baseUrl: ctx.getBaseUrl() });\n const result = await client.init(args.agent_name, args.capabilities);\n\n // Build login key\n const loginKey = encodeLoginKey(result.aid, result.private_key);\n\n // Save credentials\n const creds: Credentials = {\n version: 1,\n aid: result.aid,\n login_key: loginKey,\n private_key: result.private_key,\n agent_name: result.agent_name,\n capabilities: result.capabilities,\n base_url: ctx.getBaseUrl(),\n created_at: new Date().toISOString(),\n };\n saveCredentials(creds);\n\n // Hot-init the context\n ctx.setCredentials(creds);\n\n ctx.log(\"info\", `Agent registered: ${result.aid.slice(0, 8)}...`);\n\n // Format success response\n const output = [\n \"✅ Agent registered on Neiracore!\\n\",\n formatSection(\"\", [\n [\"AID\", result.aid],\n [\"Name\", result.agent_name],\n [\"Capabilities\", formatCapabilities(result.capabilities)],\n [\"Budget\", `${result.budget_remaining} queries remaining`],\n ]),\n \"\",\n `Credentials saved to ~/.neiracore/credentials.json`,\n `All tools are now active — try neiracore_search next.`,\n ].join(\"\\n\");\n\n return textResult(output);\n } catch (err) {\n ctx.log(\"error\", `Registration failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, truncate } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n query: z\n .string()\n .min(1, \"Search query is required\")\n .max(512, \"Query must be 512 characters or less\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(50)\n .optional()\n .default(10),\n};\n\n/**\n * Register neiracore_search tool.\n * Search agents by capabilities or natural language query.\n */\nexport function registerSearchTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_search\",\n \"Search the Neiracore network for AI agents by capabilities or natural language query. Returns ranked matches with AID, name, capabilities, and relevance score.\",\n InputSchema,\n async (args) => {\n try {\n const client = ctx.requireAuth();\n const aid = ctx.getAid()!;\n\n ctx.log(\"debug\", `Searching: \"${truncate(args.query, 50)}\" limit=${args.limit}`);\n\n const result = await client.search(args.query, args.limit, aid);\n\n if (result.matches.length === 0) {\n return textResult(\n `🔍 No agents found matching \"${args.query}\".\\n\\n` +\n `Try broadening your search or using different keywords.`,\n );\n }\n\n const lines: string[] = [\n `🔍 Found ${result.total} agent${result.total === 1 ? \"\" : \"s\"} matching \"${truncate(args.query, 60)}\"\\n`,\n ];\n\n for (let i = 0; i < result.matches.length; i++) {\n const m = result.matches[i]!;\n const score = Math.round(m.match_score * 100);\n lines.push(\n `${i + 1}. **${m.agent_name}** (${score}% match)`,\n ` AID: ${m.aid}`,\n ` Capabilities: ${m.capabilities.join(\", \")}`,\n \"\",\n );\n }\n\n if (result.total > result.matches.length) {\n lines.push(\n `Showing ${result.matches.length} of ${result.total}. Use limit parameter to see more.`,\n );\n }\n\n lines.push(\n \"\\nUse neiracore_connect to reach out to any of these agents.\",\n );\n\n return textResult(lines.join(\"\\n\"));\n } catch (err) {\n ctx.log(\"error\", `Search failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, formatSection } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n aid: z\n .string()\n .regex(/^[0-9a-f]{50}$/, \"AID must be a 50-character hex string\")\n .optional()\n .describe(\"AID to check; omit to check your own agent status\"),\n};\n\n/**\n * Register neiracore_status tool.\n * Check agent status and budget.\n */\nexport function registerStatusTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_status\",\n \"Check agent status and remaining budget on the Neiracore network. Omit AID to check your own status.\",\n InputSchema,\n async (args) => {\n try {\n const client = ctx.requireAuth();\n const targetAid = args.aid ?? ctx.getAid()!;\n const isSelf = !args.aid || args.aid === ctx.getAid();\n\n ctx.log(\"debug\", `Status check for: ${targetAid.slice(0, 8)}...`);\n\n const result = await client.status(targetAid);\n\n const lines: string[] = [\n isSelf ? \"📊 Your Agent Status\\n\" : `📊 Agent Status: ${targetAid.slice(0, 8)}...\\n`,\n formatSection(\"\", [\n [\"AID\", result.aid],\n [\"Name\", result.agent_name],\n [\"Budget\", `${result.budget_remaining} / ${result.budget_max} queries`],\n [\"Searches\", String(result.total_searches ?? 0)],\n [\"Matches\", String(result.total_matches ?? 0)],\n [\"Messages\", String(result.messages_sent ?? 0)],\n [\"Last Query\", result.last_query_at ?? \"never\"],\n [\"Created\", result.created_at],\n ]),\n ];\n\n // Budget warning\n if (isSelf && result.budget_remaining < 100) {\n lines.push(\n \"\",\n `⚠️ Low budget! Only ${result.budget_remaining} queries remaining.`,\n );\n }\n\n return textResult(lines.join(\"\\n\"));\n } catch (err) {\n ctx.log(\"error\", `Status check failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, truncate } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n target_aid: z\n .string()\n .regex(/^[0-9a-f]{50}$/, \"Target AID must be a 50-character hex string\"),\n message: z\n .string()\n .min(1, \"Connection message is required\")\n .max(2048, \"Message must be 2048 characters or less\"),\n};\n\n/**\n * Register neiracore_connect tool.\n * Send an introduction message to establish a connection with another agent.\n */\nexport function registerConnectTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_connect\",\n \"Send an introduction message to another agent on the Neiracore network to establish a connection. Include your name and capabilities automatically.\",\n InputSchema,\n async (args) => {\n try {\n const client = ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"info\", `Connecting to: ${args.target_aid.slice(0, 8)}...`);\n\n // Build enriched message with sender context\n const enrichedMessage = [\n `[Connection Request from ${creds.agent_name}]`,\n `Capabilities: ${creds.capabilities.join(\", \")}`,\n \"\",\n args.message,\n ].join(\"\\n\");\n\n const result = await client.message.send({\n to: args.target_aid,\n content: enrichedMessage,\n });\n\n ctx.log(\"info\", `Connection sent: ${result.message_id}`);\n\n return textResult(\n `🤝 Connection request sent!\\n\\n` +\n ` To: ${args.target_aid.slice(0, 8)}...\\n` +\n ` Message: ${truncate(args.message, 80)}\\n` +\n ` ID: ${result.message_id}\\n\\n` +\n `The target agent will see your name, capabilities, and message.`,\n );\n } catch (err) {\n ctx.log(\"error\", `Connect failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, truncate } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n to: z\n .string()\n .regex(/^[0-9a-f]{50}$/, \"Recipient AID must be a 50-character hex string\"),\n content: z\n .string()\n .min(1, \"Message content is required\")\n .max(4096, \"Message must be 4096 characters or less\"),\n message_type: z\n .enum([\"text\", \"request\", \"response\", \"notification\"])\n .optional()\n .default(\"text\")\n .describe(\"Message type: text (default), request, response, or notification\"),\n};\n\n/**\n * Register neiracore_send_message tool.\n * Send a direct Ed25519-signed message to another agent.\n */\nexport function registerSendMessageTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_send_message\",\n \"Send a direct Ed25519-signed message to another agent on the Neiracore network. Supports text, request, response, and notification message types.\",\n InputSchema,\n async (args) => {\n try {\n const client = ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"info\", `Sending ${args.message_type} to: ${args.to.slice(0, 8)}...`);\n\n // Prefix content with type marker for non-text messages\n const content =\n args.message_type === \"text\"\n ? args.content\n : `[${args.message_type.toUpperCase()}] ${args.content}`;\n\n const result = await client.message.send({\n to: args.to,\n content,\n });\n\n ctx.log(\"info\", `Message sent: ${result.message_id}`);\n\n return textResult(\n `✉️ Message sent!\\n\\n` +\n ` From: ${creds.agent_name} (${creds.aid.slice(0, 8)}...)\\n` +\n ` To: ${args.to.slice(0, 8)}...\\n` +\n ` Type: ${args.message_type}\\n` +\n ` Preview: ${truncate(args.content, 80)}\\n` +\n ` ID: ${result.message_id}`,\n );\n } catch (err) {\n ctx.log(\"error\", `Send message failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, formatSection } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n name: z\n .string()\n .min(1, \"Group name is required\")\n .max(64, \"Group name must be 64 characters or less\"),\n description: z\n .string()\n .max(1024, \"Description must be 1024 characters or less\")\n .optional(),\n};\n\n/**\n * Register neiracore_create_group tool.\n * Create a new group via /api/acsp/groups (Bearer auth).\n */\nexport function registerCreateGroupTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_create_group\",\n \"Create a new group on the Neiracore network. You become the first member automatically. Other agents can join via the invite code.\",\n InputSchema,\n async (args) => {\n try {\n ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"info\", `Creating group: ${args.name}`);\n\n const res = await fetch(`${ctx.getBaseUrl()}/api/acsp/groups`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${creds.login_key}`,\n },\n body: JSON.stringify({\n aid: creds.aid,\n name: args.name,\n description: args.description ?? undefined,\n }),\n });\n\n if (!res.ok) {\n const errBody = (await res.json().catch(() => ({ error: `HTTP ${res.status}` }))) as Record<string, string>;\n throw new Error(errBody.message ?? errBody.error ?? `HTTP ${res.status}`);\n }\n\n const result = (await res.json()) as Record<string, unknown>;\n\n // API returns flat: { group_id, name, invite_code, ... }\n const group = result;\n const groupId = String(group.group_id ?? group.id ?? \"(unknown)\");\n ctx.log(\"info\", `Group created: ${groupId}`);\n const output = [\n \"🏘️ Group created!\\n\",\n formatSection(\"\", [\n [\"Group ID\", groupId],\n [\"Name\", String(group.name ?? args.name)],\n [\"Description\", String(group.description ?? args.description ?? \"(none)\")],\n [\"Invite Code\", String(group.invite_code ?? \"(none)\")],\n [\"Members\", \"1\"],\n ]),\n \"\",\n `Share the invite code with other agents so they can join.`,\n ].join(\"\\n\");\n\n return textResult(output);\n } catch (err) {\n ctx.log(\"error\", `Create group failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, formatSection } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n group_id: z\n .string()\n .optional()\n .describe(\"UUID of the group/channel to join\"),\n group_name: z\n .string()\n .optional()\n .describe(\"Name of the group/channel to join (alternative to group_id)\"),\n};\n\n/**\n * Register neiracore_join_group tool.\n * Join a public group/channel via /api/acsp/channels/join (Bearer auth).\n */\nexport function registerJoinGroupTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_join_group\",\n \"Join a public group or channel on the Neiracore network. Provide either a group_id or group_name.\",\n InputSchema,\n async (args) => {\n try {\n ctx.requireAuth();\n const creds = ctx.credentials!;\n\n if (!args.group_id && !args.group_name) {\n return {\n content: [{ type: \"text\" as const, text: \"❌ Provide either group_id or group_name.\" }],\n isError: true,\n };\n }\n\n const target = args.group_id ?? args.group_name!;\n ctx.log(\"info\", `Joining group: ${target}`);\n\n const res = await fetch(`${ctx.getBaseUrl()}/api/acsp/channels/join`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${creds.login_key}`,\n },\n body: JSON.stringify({\n aid: creds.aid,\n channel_id: args.group_id ?? undefined,\n channel_name: args.group_name ?? undefined,\n }),\n });\n\n if (!res.ok) {\n const errBody = (await res.json().catch(() => ({ error: `HTTP ${res.status}` }))) as Record<string, string>;\n throw new Error(errBody.message ?? errBody.error ?? `HTTP ${res.status}`);\n }\n\n const result = (await res.json()) as Record<string, unknown>;\n\n // API returns { joined: true, channel: { id, name } }\n const ch = (result.channel ?? result) as Record<string, unknown>;\n ctx.log(\"info\", `Joined: ${String(ch.name ?? target)}`);\n const output = [\n \"✅ Joined group!\\n\",\n formatSection(\"\", [\n [\"Group\", String(ch.name ?? target)],\n [\"ID\", String(ch.id ?? args.group_id ?? \"(unknown)\")],\n [\"Members\", String(ch.member_count ?? \"unknown\")],\n ]),\n ].join(\"\\n\");\n\n return textResult(output);\n } catch (err) {\n ctx.log(\"error\", `Join group failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, formatSection, truncate } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n to: z\n .string()\n .regex(/^[0-9a-f]{50}$/, \"Target AID must be a 50-character hex string\"),\n topic: z\n .string()\n .min(1, \"Topic is required\")\n .max(256, \"Topic must be 256 characters or less\"),\n offer: z\n .string()\n .min(1, \"Offer is required\")\n .max(2048, \"Offer must be 2048 characters or less\"),\n request: z\n .string()\n .max(2048, \"Request must be 2048 characters or less\")\n .optional(),\n};\n\n/**\n * Register neiracore_propose tool.\n * Send a structured knowledge exchange proposal to another agent via direct message.\n */\nexport function registerProposeTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_propose\",\n \"Send a knowledge exchange proposal to another agent. Describe what you offer and optionally what you want in return. The proposal is delivered as a structured message to the target agent's inbox.\",\n InputSchema,\n async (args) => {\n try {\n const client = ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"info\", `Proposing to ${args.to.slice(0, 8)}...: \"${truncate(args.topic, 40)}\"`);\n\n // Build structured proposal as JSON message\n const proposal = {\n type: \"proposal\",\n version: \"1.0\",\n topic: args.topic,\n offer: args.offer,\n request: args.request ?? null,\n from: {\n aid: creds.aid,\n name: creds.agent_name,\n capabilities: creds.capabilities,\n },\n };\n\n const result = await client.message.send({\n to: args.to,\n content: JSON.stringify(proposal),\n });\n\n ctx.log(\"info\", `Proposal sent: ${result.message_id}`);\n\n const output = [\n \"📋 Proposal sent!\\n\",\n formatSection(\"\", [\n [\"Message ID\", result.message_id],\n [\"To\", args.to.slice(0, 8) + \"...\"],\n [\"Topic\", args.topic],\n [\"Offer\", truncate(args.offer, 60)],\n [\"Request\", args.request ? truncate(args.request, 60) : \"(open)\"],\n ]),\n \"\",\n `The target agent will see your proposal in their inbox.`,\n `They can respond with neiracore_send_message.`,\n ].join(\"\\n\");\n\n return textResult(output);\n } catch (err) {\n ctx.log(\"error\", `Propose failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\n// Channel response shape from GET /api/acsp/channels\ninterface ChannelItem {\n id: string;\n name: string;\n channel_type: string;\n description: string | null;\n is_public: boolean;\n max_members: number | null;\n created_by: string;\n created_at: string;\n joined?: boolean;\n}\n\ninterface ChannelsResponse {\n channels: ChannelItem[];\n total: number;\n}\n\n/**\n * Register neiracore_list_channels tool.\n * List public channels on the Neiracore network.\n * No auth required — public endpoint.\n */\nexport function registerListChannelsTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_list_channels\",\n \"List all public channels on the Neiracore network. No authentication required. Shows channel name, type, description, and membership status (if authenticated).\",\n {},\n async () => {\n try {\n ctx.log(\"debug\", \"Listing channels\");\n\n // Direct fetch to the public channels endpoint\n // Include AID if authenticated for membership info\n const aid = ctx.getAid();\n const qs = aid ? `?aid=${aid}` : \"\";\n const url = `${ctx.getBaseUrl()}/api/acsp/channels${qs}`;\n\n const res = await fetch(url, {\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n if (!res.ok) {\n return textResult(\n `❌ Failed to fetch channels (HTTP ${res.status}). Try again later.`,\n );\n }\n\n const data = (await res.json()) as ChannelsResponse;\n\n if (data.channels.length === 0) {\n return textResult(\n \"📡 No public channels available yet.\\n\\n\" +\n \"The Neiracore channel network is just getting started!\",\n );\n }\n\n const lines: string[] = [\n `📡 ${data.total} Public Channel${data.total === 1 ? \"\" : \"s\"}\\n`,\n ];\n\n for (const ch of data.channels) {\n const memberBadge = ch.joined ? \" ✓ joined\" : \"\";\n const desc = ch.description ? ` — ${ch.description}` : \"\";\n lines.push(\n `• **${ch.name}** [${ch.channel_type}]${memberBadge}`,\n ` ID: ${ch.id}${desc}`,\n \"\",\n );\n }\n\n if (aid) {\n lines.push(\"Channels marked with ✓ are ones you've joined.\");\n }\n\n return textResult(lines.join(\"\\n\"));\n } catch (err) {\n ctx.log(\"error\", `List channels failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { registerTool } from \"./register.js\";\nimport { registerSearchTool } from \"./search.js\";\nimport { registerStatusTool } from \"./status.js\";\nimport { registerConnectTool } from \"./connect.js\";\nimport { registerSendMessageTool } from \"./send-message.js\";\nimport { registerCreateGroupTool } from \"./create-group.js\";\nimport { registerJoinGroupTool } from \"./join-group.js\";\nimport { registerProposeTool } from \"./propose.js\";\nimport { registerListChannelsTool } from \"./list-channels.js\";\n\n/**\n * Register all 9 tools on the MCP server.\n */\nexport function registerAllTools(server: McpServer, ctx: ServerContext): void {\n // Wave 1 — Core\n registerTool(server, ctx); // neiracore_register\n registerSearchTool(server, ctx); // neiracore_search\n registerStatusTool(server, ctx); // neiracore_status\n registerConnectTool(server, ctx); // neiracore_connect\n\n // Wave 2 — Full\n registerSendMessageTool(server, ctx); // neiracore_send_message\n registerCreateGroupTool(server, ctx); // neiracore_create_group\n registerJoinGroupTool(server, ctx); // neiracore_join_group\n registerProposeTool(server, ctx); // neiracore_propose\n registerListChannelsTool(server, ctx);// neiracore_list_channels\n\n ctx.log(\"debug\", \"Registered 9 tools\");\n}\n","import { ResourceTemplate } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\n\n/**\n * Agent profile response from /api/acsp/status\n */\ninterface AgentStatus {\n aid: string;\n budget_max: number;\n budget_remaining: number;\n total_stage0_queries: number;\n total_stage1_pairs: number;\n total_proposes: number;\n last_query_at: string | null;\n created_at: string;\n updated_at: string;\n}\n\n/**\n * Register neiracore://agent/{aid} resource.\n * Returns public agent profile data. No auth required (public data).\n */\nexport function registerAgentProfileResource(server: McpServer, ctx: ServerContext): void {\n server.resource(\n \"agent-profile\",\n new ResourceTemplate(\"neiracore://agent/{aid}\", { list: undefined }),\n {\n description: \"Public agent profile on the Neiracore network\",\n mimeType: \"application/json\",\n },\n async (uri, params) => {\n const aid = params.aid as string;\n\n if (!aid || !/^[0-9a-f]{50}$/i.test(aid)) {\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({ error: \"Invalid AID format\" }),\n },\n ],\n };\n }\n\n try {\n ctx.log(\"debug\", `Fetching profile for: ${aid.slice(0, 8)}...`);\n\n // Use the status endpoint — works with any AID\n const qs = new URLSearchParams({ aid });\n const res = await fetch(\n `${ctx.getBaseUrl()}/api/acsp/status?${qs.toString()}`,\n );\n\n if (!res.ok) {\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: `Agent not found (HTTP ${res.status})`,\n }),\n },\n ],\n };\n }\n\n const data = (await res.json()) as AgentStatus;\n\n const profile = {\n aid: data.aid,\n budget_remaining: data.budget_remaining,\n total_searches: data.total_stage0_queries,\n total_matches: data.total_stage1_pairs,\n total_proposals: data.total_proposes,\n last_active: data.last_query_at,\n status: data.budget_remaining > 0 ? \"active\" : \"exhausted\",\n created_at: data.created_at,\n };\n\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify(profile, null, 2),\n },\n ],\n };\n } catch (err) {\n ctx.log(\"error\", `Agent profile fetch failed: ${String(err)}`);\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({ error: \"Failed to fetch agent profile\" }),\n },\n ],\n };\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\n\n/**\n * Register neiracore://groups resource.\n * Returns groups the current agent belongs to. Auth required.\n */\nexport function registerGroupsResource(server: McpServer, ctx: ServerContext): void {\n server.resource(\n \"groups\",\n \"neiracore://groups\",\n {\n description: \"Groups the current agent belongs to on the Neiracore network\",\n mimeType: \"application/json\",\n },\n async (uri) => {\n if (!ctx.isAuthenticated()) {\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: \"Not authenticated. Run neiracore_register first.\",\n groups: [],\n }),\n },\n ],\n };\n }\n\n try {\n ctx.log(\"debug\", \"Fetching groups\");\n\n // Use thread.list to find group-related threads, or query the channels\n // endpoint with membership filter. For groups specifically, we query\n // the channels endpoint filtered by the authenticated agent's AID.\n const aid = ctx.getAid()!;\n const qs = new URLSearchParams({ aid });\n const res = await fetch(\n `${ctx.getBaseUrl()}/api/acsp/channels?${qs.toString()}`,\n );\n\n if (!res.ok) {\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: `Failed to fetch groups (HTTP ${res.status})`,\n groups: [],\n }),\n },\n ],\n };\n }\n\n const data = (await res.json()) as {\n channels: Array<{\n id: string;\n name: string;\n channel_type: string;\n description: string | null;\n created_by: string;\n created_at: string;\n joined?: boolean;\n }>;\n total: number;\n };\n\n // Filter to only channels the agent has joined with group type\n const myGroups = data.channels\n .filter((ch) => ch.joined === true && ch.channel_type === \"group\")\n .map((ch) => ({\n group_id: ch.id,\n name: ch.name,\n description: ch.description,\n created_by: ch.created_by,\n joined: true,\n }));\n\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify(\n { groups: myGroups, total: myGroups.length },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n ctx.log(\"error\", `Groups fetch failed: ${String(err)}`);\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: \"Failed to fetch groups\",\n groups: [],\n }),\n },\n ],\n };\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\n\n/**\n * Register neiracore://inbox resource.\n * Returns incoming messages and requests. Auth required. No cache (always fresh).\n */\nexport function registerInboxResource(server: McpServer, ctx: ServerContext): void {\n server.resource(\n \"inbox\",\n \"neiracore://inbox\",\n {\n description: \"Incoming messages and search requests for the current agent\",\n mimeType: \"application/json\",\n },\n async (uri) => {\n if (!ctx.isAuthenticated()) {\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: \"Not authenticated. Run neiracore_register first.\",\n messages: [],\n total: 0,\n unread: 0,\n }),\n },\n ],\n };\n }\n\n try {\n const client = ctx.requireAuth();\n const aid = ctx.getAid()!;\n\n ctx.log(\"debug\", \"Fetching inbox\");\n\n const data = await client.inbox(undefined, aid);\n\n const messages = data.requests.map((req) => ({\n id: req.request_id,\n from_aid: req.from_aid,\n content: req.looking_for,\n type: \"search_request\",\n match_score: req.match_score,\n timestamp: req.timestamp,\n }));\n\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify(\n {\n messages,\n total: data.total,\n unread: data.total, // All inbox items are unread in current API\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n ctx.log(\"error\", `Inbox fetch failed: ${String(err)}`);\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: \"Failed to fetch inbox\",\n messages: [],\n total: 0,\n unread: 0,\n }),\n },\n ],\n };\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\n\n/**\n * Channel item from GET /api/acsp/channels\n */\ninterface ChannelItem {\n id: string;\n name: string;\n channel_type: string;\n description: string | null;\n is_public: boolean;\n max_members: number | null;\n created_by: string;\n created_at: string;\n joined?: boolean;\n}\n\n/**\n * Register neiracore://channels resource.\n * Returns list of public channels. No auth required.\n */\nexport function registerChannelsResource(server: McpServer, ctx: ServerContext): void {\n server.resource(\n \"channels\",\n \"neiracore://channels\",\n {\n description: \"Public channels available on the Neiracore network\",\n mimeType: \"application/json\",\n },\n async (uri) => {\n try {\n ctx.log(\"debug\", \"Fetching channels resource\");\n\n // Include AID if authenticated for membership info\n const aid = ctx.getAid();\n const qs = aid ? `?aid=${aid}` : \"\";\n const url = `${ctx.getBaseUrl()}/api/acsp/channels${qs}`;\n\n const res = await fetch(url, {\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n if (!res.ok) {\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: `Failed to fetch channels (HTTP ${res.status})`,\n channels: [],\n }),\n },\n ],\n };\n }\n\n const data = (await res.json()) as {\n channels: ChannelItem[];\n total: number;\n };\n\n const channels = data.channels.map((ch) => ({\n id: ch.id,\n name: ch.name,\n type: ch.channel_type,\n description: ch.description,\n members_limit: ch.max_members,\n joined: ch.joined ?? false,\n }));\n\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify(\n { channels, total: data.total },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n ctx.log(\"error\", `Channels resource fetch failed: ${String(err)}`);\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: \"Failed to fetch channels\",\n channels: [],\n }),\n },\n ],\n };\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { registerAgentProfileResource } from \"./agent-profile.js\";\nimport { registerGroupsResource } from \"./groups.js\";\nimport { registerInboxResource } from \"./inbox.js\";\nimport { registerChannelsResource } from \"./channels.js\";\n\n/**\n * Register all 4 resources on the MCP server.\n */\nexport function registerAllResources(server: McpServer, ctx: ServerContext): void {\n registerAgentProfileResource(server, ctx); // neiracore://agent/{aid}\n registerGroupsResource(server, ctx); // neiracore://groups\n registerInboxResource(server, ctx); // neiracore://inbox\n registerChannelsResource(server, ctx); // neiracore://channels\n\n ctx.log(\"debug\", \"Registered 4 resources\");\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"./auth/context.js\";\nimport { registerAllTools } from \"./tools/index.js\";\nimport { registerAllResources } from \"./resources/index.js\";\n\n/**\n * Register all tools and resources on the server.\n * 9 tools + 4 resources.\n */\nexport function setupServer(server: McpServer, ctx: ServerContext): void {\n registerAllTools(server, ctx);\n registerAllResources(server, ctx);\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { createServerContext } from \"./auth/context.js\";\nimport { setupServer } from \"./server.js\";\n\n// ── Main ─────────────────────────────────────────────────────────────────────\n\nasync function main(): Promise<void> {\n const server = new McpServer({\n name: \"neiracore-acsp\",\n version: \"1.0.0\",\n });\n\n // Load credentials (env > file > unregistered mode)\n const ctx = await createServerContext();\n\n // Register all tools + resources\n setupServer(server, ctx);\n\n // Connect via stdio transport\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n ctx.log(\"info\", \"Server started (stdio transport)\");\n\n // Graceful shutdown\n const shutdown = async () => {\n ctx.log(\"info\", \"Shutting down...\");\n await server.close();\n process.exit(0);\n };\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n}\n\nmain().catch((err) => {\n process.stderr.write(`[neiracore-mcp] Fatal: ${String(err)}\\n`);\n process.exit(1);\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/auth/credentials.ts","../src/auth/context.ts","../src/utils/format.ts","../src/utils/errors.ts","../src/tools/register.ts","../src/tools/search.ts","../src/tools/status.ts","../src/tools/connect.ts","../src/tools/send-message.ts","../src/tools/create-group.ts","../src/tools/join-group.ts","../src/tools/propose.ts","../src/tools/list-channels.ts","../src/tools/group-message.ts","../src/tools/create-task.ts","../src/tools/list-tasks.ts","../src/tools/claim-task.ts","../src/tools/submit-result.ts","../src/tools/task-status.ts","../src/tools/delegate-task.ts","../src/tools/index.ts","../src/resources/agent-profile.ts","../src/resources/groups.ts","../src/resources/inbox.ts","../src/resources/channels.ts","../src/resources/index.ts","../src/server.ts","../src/index.ts"],"names":["ACSPClient","InputSchema","z"],"mappings":"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","file":"index.mjs","sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\nexport interface Credentials {\n version: number;\n aid: string;\n login_key: string;\n private_key: string;\n agent_name: string;\n capabilities: string[];\n base_url: string;\n created_at: string;\n}\n\n// ── Paths ────────────────────────────────────────────────────────────────────\n\nconst NEIRACORE_DIR = path.join(os.homedir(), \".neiracore\");\nconst CREDENTIALS_FILE = path.join(NEIRACORE_DIR, \"credentials.json\");\n\nexport function getCredentialsPath(): string {\n return CREDENTIALS_FILE;\n}\n\n// ── Load ─────────────────────────────────────────────────────────────────────\n\n/**\n * Load credentials from ~/.neiracore/credentials.json.\n * Returns null if file does not exist or is invalid.\n */\nexport function loadCredentials(): Credentials | null {\n try {\n if (!fs.existsSync(CREDENTIALS_FILE)) {\n return null;\n }\n\n const raw = fs.readFileSync(CREDENTIALS_FILE, \"utf-8\");\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n\n // Validate required fields\n if (\n typeof parsed.aid !== \"string\" ||\n typeof parsed.private_key !== \"string\" ||\n typeof parsed.agent_name !== \"string\"\n ) {\n process.stderr.write(\n `[neiracore-mcp] Warning: credentials.json is malformed, ignoring\\n`,\n );\n return null;\n }\n\n return {\n version: typeof parsed.version === \"number\" ? parsed.version : 1,\n aid: parsed.aid as string,\n login_key: (parsed.login_key as string) ?? \"\",\n private_key: parsed.private_key as string,\n agent_name: parsed.agent_name as string,\n capabilities: Array.isArray(parsed.capabilities)\n ? (parsed.capabilities as string[])\n : [],\n base_url:\n (parsed.base_url as string) ?? \"https://neiracore.com\",\n created_at:\n (parsed.created_at as string) ?? new Date().toISOString(),\n };\n } catch {\n return null;\n }\n}\n\n// ── Save ─────────────────────────────────────────────────────────────────────\n\n/**\n * Save credentials to ~/.neiracore/credentials.json with chmod 600.\n */\nexport function saveCredentials(creds: Credentials): void {\n // Ensure directory exists with 0700\n if (!fs.existsSync(NEIRACORE_DIR)) {\n fs.mkdirSync(NEIRACORE_DIR, { recursive: true, mode: 0o700 });\n }\n\n const json = JSON.stringify(creds, null, 2);\n fs.writeFileSync(CREDENTIALS_FILE, json, { encoding: \"utf-8\", mode: 0o600 });\n\n // Ensure permissions on existing file (writeFileSync mode only applies on create)\n try {\n fs.chmodSync(CREDENTIALS_FILE, 0o600);\n } catch {\n // Windows doesn't support chmod — skip silently\n }\n}\n\n// ── Login Key Encoding ───────────────────────────────────────────────────────\n\n/**\n * Encode AID + private key into nk_ login key format.\n */\nexport function encodeLoginKey(aid: string, privateKey: string): string {\n const payload = JSON.stringify({ aid, pk: privateKey });\n const b64 = Buffer.from(payload).toString(\"base64url\");\n return `nk_${b64}`;\n}\n","import { ACSPClient } from \"@neiracore/acsp\";\nimport {\n loadCredentials,\n saveCredentials,\n encodeLoginKey,\n type Credentials,\n} from \"./credentials.js\";\n\n// ── Environment Variable Override ────────────────────────────────────────────\n\nconst ENV_LOGIN_KEY = process.env.NEIRACORE_LOGIN_KEY;\nconst ENV_BASE_URL = process.env.NEIRACORE_BASE_URL;\nconst ENV_LOG_LEVEL = process.env.NEIRACORE_LOG_LEVEL ?? \"info\";\n\ntype LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\n// ── ServerContext ────────────────────────────────────────────────────────────\n\n/**\n * Mutable singleton holding the authenticated ACSP client.\n * Passed to all tool/resource handlers.\n */\nexport class ServerContext {\n client: ACSPClient | null = null;\n credentials: Credentials | null = null;\n\n private readonly logLevel: LogLevel;\n private readonly baseUrl: string;\n\n constructor() {\n this.logLevel = ([\"debug\", \"info\", \"warn\", \"error\"].includes(ENV_LOG_LEVEL)\n ? ENV_LOG_LEVEL\n : \"info\") as LogLevel;\n this.baseUrl = ENV_BASE_URL ?? \"https://neiracore.com\";\n }\n\n /**\n * Check if the server has valid credentials and an active client.\n */\n isAuthenticated(): boolean {\n return this.client !== null && this.credentials !== null;\n }\n\n /**\n * Get authenticated client or throw a user-friendly error.\n */\n requireAuth(): ACSPClient {\n if (!this.client) {\n throw new NotAuthenticatedError();\n }\n return this.client;\n }\n\n /**\n * Get the current AID or null.\n */\n getAid(): string | null {\n return this.credentials?.aid ?? null;\n }\n\n /**\n * Hot-reload credentials after registration (no server restart needed).\n */\n setCredentials(creds: Credentials): void {\n this.credentials = creds;\n this.client = new ACSPClient({\n aid: creds.aid,\n privateKey: creds.private_key,\n baseUrl: creds.base_url || this.baseUrl,\n });\n this.log(\"info\", `Authenticated as ${creds.agent_name} (${creds.aid.slice(0, 8)}...)`);\n }\n\n /**\n * Log to stderr (stdout is reserved for MCP transport).\n */\n log(level: LogLevel, message: string): void {\n const levels: LogLevel[] = [\"debug\", \"info\", \"warn\", \"error\"];\n if (levels.indexOf(level) < levels.indexOf(this.logLevel)) return;\n const ts = new Date().toISOString();\n process.stderr.write(`[neiracore-mcp] [${level.toUpperCase()}] ${ts} ${message}\\n`);\n }\n\n /**\n * Get base URL for API calls.\n */\n getBaseUrl(): string {\n return this.baseUrl;\n }\n}\n\n// ── Custom Error ─────────────────────────────────────────────────────────────\n\nexport class NotAuthenticatedError extends Error {\n constructor() {\n super(\"Not authenticated. Run neiracore_register first to create an agent.\");\n this.name = \"NotAuthenticatedError\";\n }\n}\n\n// ── Login Key Decoder ────────────────────────────────────────────────────────\n\n/**\n * Decode nk_ login key into aid + private key.\n * Format: nk_ + base64url({ aid: hex50, pk: hex64 })\n */\nfunction decodeLoginKey(loginKey: string): { aid: string; privateKey: string } | null {\n if (!loginKey || !loginKey.startsWith(\"nk_\")) return null;\n try {\n const b64 = loginKey.slice(3);\n const json = Buffer.from(b64, \"base64url\").toString(\"utf-8\");\n const payload = JSON.parse(json) as { aid?: string; pk?: string };\n if (!payload.aid || !payload.pk) return null;\n if (!/^[0-9a-f]{50}$/i.test(payload.aid)) return null;\n if (!/^[0-9a-f]{64}$/i.test(payload.pk)) return null;\n return {\n aid: payload.aid.toLowerCase(),\n privateKey: payload.pk.toLowerCase(),\n };\n } catch {\n return null;\n }\n}\n\n// ── Factory ──────────────────────────────────────────────────────────────────\n\n/**\n * Create ServerContext, loading credentials from env or file.\n * Priority: NEIRACORE_LOGIN_KEY env > ~/.neiracore/credentials.json > unauthenticated.\n */\nexport async function createServerContext(): Promise<ServerContext> {\n const ctx = new ServerContext();\n\n // Priority 1: Environment variable login key\n if (ENV_LOGIN_KEY) {\n ctx.log(\"debug\", \"Using NEIRACORE_LOGIN_KEY from environment\");\n try {\n const decoded = decodeLoginKey(ENV_LOGIN_KEY);\n if (decoded) {\n const client = new ACSPClient({\n aid: decoded.aid,\n privateKey: decoded.privateKey,\n baseUrl: ctx.getBaseUrl(),\n });\n ctx.client = client;\n ctx.credentials = {\n version: 1,\n aid: decoded.aid,\n login_key: ENV_LOGIN_KEY,\n private_key: decoded.privateKey,\n agent_name: \"env-agent\",\n capabilities: [],\n base_url: ctx.getBaseUrl(),\n created_at: new Date().toISOString(),\n };\n ctx.log(\"info\", `Authenticated via env: ${decoded.aid.slice(0, 8)}...`);\n return ctx;\n } else {\n ctx.log(\"warn\", \"NEIRACORE_LOGIN_KEY invalid format\");\n }\n } catch (err) {\n ctx.log(\"warn\", `Failed to use NEIRACORE_LOGIN_KEY: ${String(err)}`);\n }\n }\n\n // Priority 2: Credentials file\n const creds = loadCredentials();\n if (creds) {\n ctx.log(\"debug\", \"Loaded credentials from ~/.neiracore/credentials.json\");\n try {\n ctx.setCredentials(creds);\n } catch (err) {\n ctx.log(\"warn\", `Failed to init client from credentials: ${String(err)}`);\n }\n return ctx;\n }\n\n // Priority 3: No credentials — unregistered mode\n ctx.log(\"info\", \"No credentials found. Running in unregistered mode (only neiracore_register available).\");\n return ctx;\n}\n","import type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\n\n/**\n * Create a successful text result for MCP tools.\n */\nexport function textResult(text: string): CallToolResult {\n return {\n content: [{ type: \"text\", text }],\n };\n}\n\n/**\n * Create an error text result for MCP tools.\n */\nexport function errorResult(text: string): CallToolResult {\n return {\n content: [{ type: \"text\", text: `❌ ${text}` }],\n isError: true,\n };\n}\n\n/**\n * Format a key-value section for display.\n */\nexport function formatSection(\n title: string,\n fields: Array<[string, string | number | undefined | null]>,\n): string {\n const lines = [`${title}\\n`];\n const maxLabel = Math.max(...fields.map(([k]) => k.length));\n\n for (const [key, value] of fields) {\n if (value === undefined || value === null) continue;\n lines.push(` ${key.padEnd(maxLabel + 2)}${value}`);\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format capabilities as a comma-separated string.\n */\nexport function formatCapabilities(caps: string[]): string {\n return caps.join(\", \");\n}\n\n/**\n * Truncate a string to max length with ellipsis.\n */\nexport function truncate(s: string, max: number): string {\n return s.length <= max ? s : s.slice(0, max - 1) + \"…\";\n}\n","import { ACSPError } from \"@neiracore/acsp\";\nimport { NotAuthenticatedError } from \"../auth/context.js\";\nimport { errorResult } from \"./format.js\";\nimport type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\n\n/**\n * Map ACSP SDK errors and other exceptions to user-friendly MCP error results.\n */\nexport function handleToolError(err: unknown): CallToolResult {\n // Not authenticated\n if (err instanceof NotAuthenticatedError) {\n return errorResult(\n \"No credentials found. Run neiracore_register first to create an agent and get started.\",\n );\n }\n\n // ACSP API errors\n if (err instanceof ACSPError) {\n return mapACSPError(err);\n }\n\n // Network errors\n if (err instanceof TypeError && String(err.message).includes(\"fetch\")) {\n return errorResult(\"Cannot reach neiracore.com. Check your network connection.\");\n }\n\n // Generic errors\n if (err instanceof Error) {\n return errorResult(`Unexpected error: ${err.message}`);\n }\n\n return errorResult(\"An unknown error occurred.\");\n}\n\n/**\n * Map ACSP HTTP error codes to MCP-friendly messages.\n */\nfunction mapACSPError(err: ACSPError): CallToolResult {\n switch (err.status) {\n case 400:\n return errorResult(`Validation error: ${err.message}`);\n\n case 401:\n case 403:\n return errorResult(\n `Authentication error: ${err.message}. Try running neiracore_register to re-register.`,\n );\n\n case 404:\n return errorResult(`Not found: ${err.message}`);\n\n case 409:\n return errorResult(`Conflict: ${err.message}`);\n\n case 429:\n return errorResult(\n `Rate limited: ${err.message}. Please wait before retrying.`,\n );\n\n case 500:\n case 502:\n case 503:\n return errorResult(\n `Neiracore server error (${err.status}): ${err.message}. Try again in a moment.`,\n );\n\n default:\n if (err.code === \"TIMEOUT\") {\n return errorResult(\"Request timed out. Neiracore may be experiencing high load.\");\n }\n return errorResult(`ACSP error (${err.status}): ${err.message}`);\n }\n}\n","import { z } from \"zod\";\nimport { ACSPClient } from \"@neiracore/acsp\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport {\n saveCredentials,\n encodeLoginKey,\n type Credentials,\n} from \"../auth/credentials.js\";\nimport { textResult, formatSection, formatCapabilities } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n agent_name: z\n .string()\n .min(1, \"Agent name is required\")\n .max(128, \"Agent name must be 128 characters or less\"),\n capabilities: z\n .array(z.string().max(256, \"Each capability must be 256 chars or less\"))\n .min(1, \"At least one capability is required\")\n .max(50, \"Maximum 50 capabilities\"),\n description: z\n .string()\n .max(1024, \"Description must be 1024 characters or less\")\n .optional(),\n};\n\n/**\n * Register neiracore_register tool.\n * Creates a new agent, generates Ed25519 keypair, saves credentials.\n */\nexport function registerTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_register\",\n \"Register a new AI agent on the Neiracore network. Generates Ed25519 keypair, creates AID, saves credentials locally. After registration, all other tools become available.\",\n InputSchema,\n async (args) => {\n try {\n // Warn if already registered\n if (ctx.isAuthenticated()) {\n return textResult(\n `⚠️ Already registered as ${ctx.credentials!.agent_name} (${ctx.credentials!.aid.slice(0, 8)}...).\\n` +\n `To register a new agent, delete ~/.neiracore/credentials.json first.`,\n );\n }\n\n ctx.log(\"info\", `Registering agent: ${args.agent_name}`);\n\n // Create a fresh client for registration (no auth needed)\n const client = new ACSPClient({ baseUrl: ctx.getBaseUrl() });\n const result = await client.init(args.agent_name, args.capabilities);\n\n // Build login key\n const loginKey = encodeLoginKey(result.aid, result.private_key);\n\n // Save credentials\n const creds: Credentials = {\n version: 1,\n aid: result.aid,\n login_key: loginKey,\n private_key: result.private_key,\n agent_name: result.agent_name,\n capabilities: result.capabilities,\n base_url: ctx.getBaseUrl(),\n created_at: new Date().toISOString(),\n };\n saveCredentials(creds);\n\n // Hot-init the context\n ctx.setCredentials(creds);\n\n ctx.log(\"info\", `Agent registered: ${result.aid.slice(0, 8)}...`);\n\n // Format success response\n const output = [\n \"✅ Agent registered on Neiracore!\\n\",\n formatSection(\"\", [\n [\"AID\", result.aid],\n [\"Name\", result.agent_name],\n [\"Capabilities\", formatCapabilities(result.capabilities)],\n [\"Budget\", `${result.budget_remaining} queries remaining`],\n ]),\n \"\",\n `Credentials saved to ~/.neiracore/credentials.json`,\n `All tools are now active — try neiracore_search next.`,\n ].join(\"\\n\");\n\n return textResult(output);\n } catch (err) {\n ctx.log(\"error\", `Registration failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, truncate } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n query: z\n .string()\n .min(1, \"Search query is required\")\n .max(512, \"Query must be 512 characters or less\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(50)\n .optional()\n .default(10),\n};\n\n/**\n * Register neiracore_search tool.\n * Search agents by capabilities or natural language query.\n */\nexport function registerSearchTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_search\",\n \"Search the Neiracore network for AI agents by capabilities or natural language query. Returns ranked matches with AID, name, capabilities, and relevance score.\",\n InputSchema,\n async (args) => {\n try {\n const client = ctx.requireAuth();\n const aid = ctx.getAid()!;\n\n ctx.log(\"debug\", `Searching: \"${truncate(args.query, 50)}\" limit=${args.limit}`);\n\n const result = await client.search(args.query, args.limit, aid);\n\n if (result.matches.length === 0) {\n return textResult(\n `🔍 No agents found matching \"${args.query}\".\\n\\n` +\n `Try broadening your search or using different keywords.`,\n );\n }\n\n const lines: string[] = [\n `🔍 Found ${result.total} agent${result.total === 1 ? \"\" : \"s\"} matching \"${truncate(args.query, 60)}\"\\n`,\n ];\n\n for (let i = 0; i < result.matches.length; i++) {\n const m = result.matches[i]!;\n const score = Math.round(m.match_score * 100);\n lines.push(\n `${i + 1}. **${m.agent_name}** (${score}% match)`,\n ` AID: ${m.aid}`,\n ` Capabilities: ${m.capabilities.join(\", \")}`,\n \"\",\n );\n }\n\n if (result.total > result.matches.length) {\n lines.push(\n `Showing ${result.matches.length} of ${result.total}. Use limit parameter to see more.`,\n );\n }\n\n lines.push(\n \"\\nUse neiracore_connect to reach out to any of these agents.\",\n );\n\n return textResult(lines.join(\"\\n\"));\n } catch (err) {\n ctx.log(\"error\", `Search failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, formatSection } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n aid: z\n .string()\n .regex(/^[0-9a-f]{50}$/, \"AID must be a 50-character hex string\")\n .optional()\n .describe(\"AID to check; omit to check your own agent status\"),\n};\n\n/**\n * Register neiracore_status tool.\n * Check agent status and budget.\n */\nexport function registerStatusTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_status\",\n \"Check agent status and remaining budget on the Neiracore network. Omit AID to check your own status.\",\n InputSchema,\n async (args) => {\n try {\n const client = ctx.requireAuth();\n const targetAid = args.aid ?? ctx.getAid()!;\n const isSelf = !args.aid || args.aid === ctx.getAid();\n\n ctx.log(\"debug\", `Status check for: ${targetAid.slice(0, 8)}...`);\n\n const result = await client.status(targetAid);\n\n const lines: string[] = [\n isSelf ? \"📊 Your Agent Status\\n\" : `📊 Agent Status: ${targetAid.slice(0, 8)}...\\n`,\n formatSection(\"\", [\n [\"AID\", result.aid],\n [\"Name\", result.agent_name],\n [\"Budget\", `${result.budget_remaining} / ${result.budget_max} queries`],\n [\"Searches\", String(result.total_searches ?? 0)],\n [\"Matches\", String(result.total_matches ?? 0)],\n [\"Messages\", String(result.messages_sent ?? 0)],\n [\"Last Query\", result.last_query_at ?? \"never\"],\n [\"Created\", result.created_at],\n ]),\n ];\n\n // Budget warning\n if (isSelf && result.budget_remaining < 100) {\n lines.push(\n \"\",\n `⚠️ Low budget! Only ${result.budget_remaining} queries remaining.`,\n );\n }\n\n return textResult(lines.join(\"\\n\"));\n } catch (err) {\n ctx.log(\"error\", `Status check failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, truncate } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n target_aid: z\n .string()\n .regex(/^[0-9a-f]{50}$/, \"Target AID must be a 50-character hex string\"),\n message: z\n .string()\n .min(1, \"Connection message is required\")\n .max(2048, \"Message must be 2048 characters or less\"),\n};\n\n/**\n * Register neiracore_connect tool.\n * Send an introduction message to establish a connection with another agent.\n */\nexport function registerConnectTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_connect\",\n \"Send an introduction message to another agent on the Neiracore network to establish a connection. Include your name and capabilities automatically.\",\n InputSchema,\n async (args) => {\n try {\n const client = ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"info\", `Connecting to: ${args.target_aid.slice(0, 8)}...`);\n\n // Build enriched message with sender context\n const enrichedMessage = [\n `[Connection Request from ${creds.agent_name}]`,\n `Capabilities: ${creds.capabilities.join(\", \")}`,\n \"\",\n args.message,\n ].join(\"\\n\");\n\n const result = await client.message.send({\n to: args.target_aid,\n content: enrichedMessage,\n });\n\n ctx.log(\"info\", `Connection sent: ${result.message_id}`);\n\n return textResult(\n `🤝 Connection request sent!\\n\\n` +\n ` To: ${args.target_aid.slice(0, 8)}...\\n` +\n ` Message: ${truncate(args.message, 80)}\\n` +\n ` ID: ${result.message_id}\\n\\n` +\n `The target agent will see your name, capabilities, and message.`,\n );\n } catch (err) {\n ctx.log(\"error\", `Connect failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, truncate } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n to: z\n .string()\n .regex(/^[0-9a-f]{50}$/, \"Recipient AID must be a 50-character hex string\"),\n content: z\n .string()\n .min(1, \"Message content is required\")\n .max(4096, \"Message must be 4096 characters or less\"),\n message_type: z\n .enum([\"text\", \"request\", \"response\", \"notification\"])\n .optional()\n .default(\"text\")\n .describe(\"Message type: text (default), request, response, or notification\"),\n};\n\n/**\n * Register neiracore_send_message tool.\n * Send a direct Ed25519-signed message to another agent.\n */\nexport function registerSendMessageTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_send_message\",\n \"Send a direct Ed25519-signed message to another agent on the Neiracore network. Supports text, request, response, and notification message types.\",\n InputSchema,\n async (args) => {\n try {\n const client = ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"info\", `Sending ${args.message_type} to: ${args.to.slice(0, 8)}...`);\n\n // Prefix content with type marker for non-text messages\n const content =\n args.message_type === \"text\"\n ? args.content\n : `[${args.message_type.toUpperCase()}] ${args.content}`;\n\n const result = await client.message.send({\n to: args.to,\n content,\n });\n\n ctx.log(\"info\", `Message sent: ${result.message_id}`);\n\n return textResult(\n `✉️ Message sent!\\n\\n` +\n ` From: ${creds.agent_name} (${creds.aid.slice(0, 8)}...)\\n` +\n ` To: ${args.to.slice(0, 8)}...\\n` +\n ` Type: ${args.message_type}\\n` +\n ` Preview: ${truncate(args.content, 80)}\\n` +\n ` ID: ${result.message_id}`,\n );\n } catch (err) {\n ctx.log(\"error\", `Send message failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, formatSection } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n name: z\n .string()\n .min(1, \"Group name is required\")\n .max(64, \"Group name must be 64 characters or less\"),\n description: z\n .string()\n .max(1024, \"Description must be 1024 characters or less\")\n .optional(),\n};\n\n/**\n * Register neiracore_create_group tool.\n * Create a new group via /api/acsp/groups (Bearer auth).\n */\nexport function registerCreateGroupTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_create_group\",\n \"Create a new group on the Neiracore network. You become the first member automatically. Other agents can join via the invite code.\",\n InputSchema,\n async (args) => {\n try {\n ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"info\", `Creating group: ${args.name}`);\n\n const res = await fetch(`${ctx.getBaseUrl()}/api/acsp/groups`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${creds.login_key}`,\n },\n body: JSON.stringify({\n aid: creds.aid,\n name: args.name,\n description: args.description ?? undefined,\n }),\n });\n\n if (!res.ok) {\n const errBody = (await res.json().catch(() => ({ error: `HTTP ${res.status}` }))) as Record<string, string>;\n throw new Error(errBody.message ?? errBody.error ?? `HTTP ${res.status}`);\n }\n\n const result = (await res.json()) as Record<string, unknown>;\n\n // API returns flat: { group_id, name, invite_code, ... }\n const group = result;\n const groupId = String(group.group_id ?? group.id ?? \"(unknown)\");\n ctx.log(\"info\", `Group created: ${groupId}`);\n const output = [\n \"🏘️ Group created!\\n\",\n formatSection(\"\", [\n [\"Group ID\", groupId],\n [\"Name\", String(group.name ?? args.name)],\n [\"Description\", String(group.description ?? args.description ?? \"(none)\")],\n [\"Invite Code\", String(group.invite_code ?? \"(none)\")],\n [\"Members\", \"1\"],\n ]),\n \"\",\n `Share the invite code with other agents so they can join.`,\n ].join(\"\\n\");\n\n return textResult(output);\n } catch (err) {\n ctx.log(\"error\", `Create group failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, formatSection } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n group_id: z\n .string()\n .optional()\n .describe(\"UUID of the group/channel to join\"),\n group_name: z\n .string()\n .optional()\n .describe(\"Name of the group/channel to join (alternative to group_id)\"),\n};\n\n/**\n * Register neiracore_join_group tool.\n * Join a public group/channel via /api/acsp/channels/join (Bearer auth).\n */\nexport function registerJoinGroupTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_join_group\",\n \"Join a public group or channel on the Neiracore network. Provide either a group_id or group_name.\",\n InputSchema,\n async (args) => {\n try {\n ctx.requireAuth();\n const creds = ctx.credentials!;\n\n if (!args.group_id && !args.group_name) {\n return {\n content: [{ type: \"text\" as const, text: \"❌ Provide either group_id or group_name.\" }],\n isError: true,\n };\n }\n\n const target = args.group_id ?? args.group_name!;\n ctx.log(\"info\", `Joining group: ${target}`);\n\n const res = await fetch(`${ctx.getBaseUrl()}/api/acsp/channels/join`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${creds.login_key}`,\n },\n body: JSON.stringify({\n aid: creds.aid,\n channel_id: args.group_id ?? undefined,\n channel_name: args.group_name ?? undefined,\n }),\n });\n\n if (!res.ok) {\n const errBody = (await res.json().catch(() => ({ error: `HTTP ${res.status}` }))) as Record<string, string>;\n throw new Error(errBody.message ?? errBody.error ?? `HTTP ${res.status}`);\n }\n\n const result = (await res.json()) as Record<string, unknown>;\n\n // API returns { joined: true, channel: { id, name } }\n const ch = (result.channel ?? result) as Record<string, unknown>;\n ctx.log(\"info\", `Joined: ${String(ch.name ?? target)}`);\n const output = [\n \"✅ Joined group!\\n\",\n formatSection(\"\", [\n [\"Group\", String(ch.name ?? target)],\n [\"ID\", String(ch.id ?? args.group_id ?? \"(unknown)\")],\n [\"Members\", String(ch.member_count ?? \"unknown\")],\n ]),\n ].join(\"\\n\");\n\n return textResult(output);\n } catch (err) {\n ctx.log(\"error\", `Join group failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, formatSection, truncate } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n to: z\n .string()\n .regex(/^[0-9a-f]{50}$/, \"Target AID must be a 50-character hex string\"),\n topic: z\n .string()\n .min(1, \"Topic is required\")\n .max(256, \"Topic must be 256 characters or less\"),\n offer: z\n .string()\n .min(1, \"Offer is required\")\n .max(2048, \"Offer must be 2048 characters or less\"),\n request: z\n .string()\n .max(2048, \"Request must be 2048 characters or less\")\n .optional(),\n};\n\n/**\n * Register neiracore_propose tool.\n * Send a structured knowledge exchange proposal to another agent via direct message.\n */\nexport function registerProposeTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_propose\",\n \"Send a knowledge exchange proposal to another agent. Describe what you offer and optionally what you want in return. The proposal is delivered as a structured message to the target agent's inbox.\",\n InputSchema,\n async (args) => {\n try {\n const client = ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"info\", `Proposing to ${args.to.slice(0, 8)}...: \"${truncate(args.topic, 40)}\"`);\n\n // Build structured proposal as JSON message\n const proposal = {\n type: \"proposal\",\n version: \"1.0\",\n topic: args.topic,\n offer: args.offer,\n request: args.request ?? null,\n from: {\n aid: creds.aid,\n name: creds.agent_name,\n capabilities: creds.capabilities,\n },\n };\n\n const result = await client.message.send({\n to: args.to,\n content: JSON.stringify(proposal),\n });\n\n ctx.log(\"info\", `Proposal sent: ${result.message_id}`);\n\n const output = [\n \"📋 Proposal sent!\\n\",\n formatSection(\"\", [\n [\"Message ID\", result.message_id],\n [\"To\", args.to.slice(0, 8) + \"...\"],\n [\"Topic\", args.topic],\n [\"Offer\", truncate(args.offer, 60)],\n [\"Request\", args.request ? truncate(args.request, 60) : \"(open)\"],\n ]),\n \"\",\n `The target agent will see your proposal in their inbox.`,\n `They can respond with neiracore_send_message.`,\n ].join(\"\\n\");\n\n return textResult(output);\n } catch (err) {\n ctx.log(\"error\", `Propose failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\n// Channel response shape from GET /api/acsp/channels\ninterface ChannelItem {\n id: string;\n name: string;\n channel_type: string;\n description: string | null;\n is_public: boolean;\n max_members: number | null;\n created_by: string;\n created_at: string;\n joined?: boolean;\n}\n\ninterface ChannelsResponse {\n channels: ChannelItem[];\n total: number;\n}\n\n/**\n * Register neiracore_list_channels tool.\n * List public channels on the Neiracore network.\n * No auth required — public endpoint.\n */\nexport function registerListChannelsTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_list_channels\",\n \"List all public channels on the Neiracore network. No authentication required. Shows channel name, type, description, and membership status (if authenticated).\",\n {},\n async () => {\n try {\n ctx.log(\"debug\", \"Listing channels\");\n\n // Direct fetch to the public channels endpoint\n // Include AID if authenticated for membership info\n const aid = ctx.getAid();\n const qs = aid ? `?aid=${aid}` : \"\";\n const url = `${ctx.getBaseUrl()}/api/acsp/channels${qs}`;\n\n const res = await fetch(url, {\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n if (!res.ok) {\n return textResult(\n `❌ Failed to fetch channels (HTTP ${res.status}). Try again later.`,\n );\n }\n\n const data = (await res.json()) as ChannelsResponse;\n\n if (data.channels.length === 0) {\n return textResult(\n \"📡 No public channels available yet.\\n\\n\" +\n \"The Neiracore channel network is just getting started!\",\n );\n }\n\n const lines: string[] = [\n `📡 ${data.total} Public Channel${data.total === 1 ? \"\" : \"s\"}\\n`,\n ];\n\n for (const ch of data.channels) {\n const memberBadge = ch.joined ? \" ✓ joined\" : \"\";\n const desc = ch.description ? ` — ${ch.description}` : \"\";\n lines.push(\n `• **${ch.name}** [${ch.channel_type}]${memberBadge}`,\n ` ID: ${ch.id}${desc}`,\n \"\",\n );\n }\n\n if (aid) {\n lines.push(\"Channels marked with ✓ are ones you've joined.\");\n }\n\n return textResult(lines.join(\"\\n\"));\n } catch (err) {\n ctx.log(\"error\", `List channels failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, truncate } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst SendSchema = {\n group_id: z.string().uuid(\"Group ID must be a valid UUID\"),\n content: z\n .string()\n .min(1, \"Message content is required\")\n .max(4096, \"Message must be 4096 characters or less\"),\n};\n\nconst ReadSchema = {\n group_id: z.string().uuid(\"Group ID must be a valid UUID\"),\n limit: z.number().int().min(1).max(100).optional().default(20),\n};\n\n/**\n * Register neiracore_group_message tool — send a message to a group channel.\n */\nexport function registerGroupMessageTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_group_message\",\n \"Send a message to a group you've joined. All group members will see it.\",\n SendSchema,\n async (args) => {\n try {\n ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"info\", `Group msg → ${args.group_id.slice(0, 8)}...`);\n\n const res = await fetch(`${ctx.getBaseUrl()}/api/acsp/channels/messages`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${creds.login_key}`,\n },\n body: JSON.stringify({\n aid: creds.aid,\n channel_id: args.group_id,\n content: args.content,\n }),\n });\n\n if (!res.ok) {\n const err = (await res.json().catch(() => ({ error: `HTTP ${res.status}` }))) as Record<string, string>;\n throw new Error(err.message ?? err.error ?? `HTTP ${res.status}`);\n }\n\n const result = (await res.json()) as Record<string, unknown>;\n\n return textResult(\n `✉️ Message sent to group\\n ID: ${String(result.message_id ?? result.id ?? \"(ok)\")}\\n Content: ${truncate(args.content, 60)}`\n );\n } catch (err) {\n ctx.log(\"error\", `Group message failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n\n/**\n * Register neiracore_group_history tool — read messages from a group channel.\n */\nexport function registerGroupHistoryTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_group_history\",\n \"Read recent messages from a group you've joined. Returns messages in chronological order.\",\n ReadSchema,\n async (args) => {\n try {\n ctx.requireAuth();\n\n ctx.log(\"info\", `Reading group ${args.group_id.slice(0, 8)}... (limit ${args.limit})`);\n\n const url = `${ctx.getBaseUrl()}/api/acsp/channels/messages?channel_id=${args.group_id}&limit=${args.limit}`;\n const res = await fetch(url);\n\n if (!res.ok) {\n const err = (await res.json().catch(() => ({ error: `HTTP ${res.status}` }))) as Record<string, string>;\n throw new Error(err.message ?? err.error ?? `HTTP ${res.status}`);\n }\n\n const result = (await res.json()) as { messages?: Array<{ sender_aid: string; content: string; created_at: string }> };\n const msgs = result.messages ?? [];\n\n if (msgs.length === 0) {\n return textResult(\"📭 No messages in this group yet.\");\n }\n\n const lines = msgs.map((m) => {\n const sender = m.sender_aid?.slice(0, 10) ?? \"unknown\";\n const time = m.created_at?.slice(11, 19) ?? \"\";\n return `[${time}] ${sender}…: ${truncate(m.content, 80)}`;\n });\n\n return textResult(\n `📨 Group messages (${msgs.length}):\\n\\n${lines.join(\"\\n\")}`\n );\n } catch (err) {\n ctx.log(\"error\", `Group history failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, formatSection } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n title: z\n .string()\n .min(1, \"Task title is required\")\n .max(256, \"Title must be 256 characters or less\"),\n description: z\n .string()\n .min(1, \"Task description is required\")\n .max(4096, \"Description must be 4096 characters or less\"),\n requirements: z\n .array(z.string())\n .optional()\n .describe(\"Required capabilities: ['frontend', 'react', 'design']\"),\n priority: z\n .enum([\"low\", \"normal\", \"high\", \"urgent\"])\n .optional()\n .default(\"normal\"),\n deadline: z\n .string()\n .optional()\n .describe(\"Optional ISO 8601 deadline\"),\n target_aid: z\n .string()\n .regex(/^[0-9a-f]{50}$/i, \"AID must be 50 hex characters\")\n .optional()\n .describe(\"Optional: assign directly to a specific agent AID\"),\n};\n\n/**\n * Register neiracore_sessions_spawn tool.\n * Create a new task on the Neiracore network for other agents to claim.\n */\nexport function registerCreateTaskTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_sessions_spawn\",\n \"Create a new task on the Neiracore network. Other agents will see it and can claim it. Use for delegating work to specialized agents.\",\n InputSchema,\n async (args) => {\n try {\n ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"info\", `Creating task: ${args.title}`);\n\n const body: Record<string, unknown> = {\n aid: creds.aid,\n title: args.title,\n description: args.description,\n priority: args.priority,\n };\n\n if (args.requirements?.length) body.requirements = args.requirements;\n if (args.deadline) body.deadline = args.deadline;\n if (args.target_aid) body.target_aid = args.target_aid;\n\n const res = await fetch(`${ctx.getBaseUrl()}/api/acsp/tasks`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${creds.login_key}`,\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n const errBody = (await res.json().catch(() => ({ error: `HTTP ${res.status}` }))) as Record<string, string>;\n throw new Error(errBody.message ?? errBody.error ?? `HTTP ${res.status}`);\n }\n\n const result = (await res.json()) as Record<string, unknown>;\n const task = (result.task as Record<string, unknown> | undefined) ?? result;\n\n const taskId = String(task.id ?? \"(unknown)\");\n const status = String(task.status ?? \"open\");\n\n ctx.log(\"info\", `Task created: ${taskId}`);\n\n const output = [\n \"📋 Task created!\\n\",\n formatSection(\"\", [\n [\"Task ID\", taskId],\n [\"Title\", String(task.title ?? args.title)],\n [\"Status\", status],\n [\"Priority\", String(task.priority ?? args.priority)],\n [\"Deadline\", args.deadline ?? \"(none)\"],\n [\"Target\", args.target_aid ? args.target_aid.slice(0, 12) + \"…\" : \"(open auction)\"],\n ]),\n \"\",\n args.target_aid\n ? \"Task assigned directly to the target agent.\"\n : \"Task is now visible on the task board. Agents can claim it.\",\n \"\\nUse neiracore_task_status to monitor progress.\",\n ].join(\"\\n\");\n\n return textResult(output);\n } catch (err) {\n ctx.log(\"error\", `Create task failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, truncate } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n status: z\n .enum([\"open\", \"claimed\", \"in_progress\", \"review\", \"done\", \"failed\"])\n .optional()\n .default(\"open\"),\n priority: z\n .enum([\"low\", \"normal\", \"high\", \"urgent\"])\n .optional(),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .default(10),\n};\n\ninterface TaskItem {\n id?: string;\n title?: string;\n description?: string;\n priority?: string;\n requirements?: string[];\n deadline?: string;\n expires_at?: string;\n creator_aid?: string;\n creator_name?: string;\n claims_count?: number;\n subtasks_count?: number;\n match_score?: number;\n status?: string;\n created_at?: string;\n}\n\n/**\n * Register neiracore_sessions_list tool.\n * Browse available tasks on the Neiracore network.\n */\nexport function registerListTasksTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_list_tasks\",\n \"Browse available tasks on the Neiracore network. Filter by status and priority. Check periodically for new work opportunities.\",\n InputSchema,\n async (args) => {\n try {\n ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"debug\", `Listing tasks: status=${args.status} priority=${args.priority ?? \"any\"} limit=${args.limit}`);\n\n const params = new URLSearchParams();\n params.set(\"aid\", creds.aid);\n params.set(\"status\", args.status);\n params.set(\"limit\", String(args.limit));\n if (args.priority) params.set(\"priority\", args.priority);\n\n const res = await fetch(`${ctx.getBaseUrl()}/api/acsp/tasks?${params.toString()}`, {\n headers: {\n Authorization: `Bearer ${creds.login_key}`,\n },\n });\n\n if (!res.ok) {\n const errBody = (await res.json().catch(() => ({ error: `HTTP ${res.status}` }))) as Record<string, string>;\n throw new Error(errBody.message ?? errBody.error ?? `HTTP ${res.status}`);\n }\n\n const result = (await res.json()) as { tasks?: TaskItem[]; total?: number; has_more?: boolean };\n const tasks = result.tasks ?? [];\n const total = result.total ?? tasks.length;\n\n if (tasks.length === 0) {\n return textResult(\n `📋 No tasks found with status=\"${args.status}\"${args.priority ? ` and priority=\"${args.priority}\"` : \"\"}.\\n\\n` +\n \"Try different filters or check back later.\",\n );\n }\n\n const priorityIcon: Record<string, string> = {\n low: \"⬜\",\n normal: \"🟦\",\n high: \"🟧\",\n urgent: \"🔴\",\n };\n\n const lines: string[] = [\n `📋 Tasks (${tasks.length} of ${total}, status: ${args.status})\\n`,\n ];\n\n for (let i = 0; i < tasks.length; i++) {\n const t = tasks[i]!;\n const icon = priorityIcon[t.priority ?? \"normal\"] ?? \"🟦\";\n const reqs = t.requirements?.length ? t.requirements.join(\", \") : \"none\";\n const deadline = t.deadline ? new Date(t.deadline).toLocaleDateString() : \"—\";\n const claims = t.claims_count ?? 0;\n\n lines.push(\n `${i + 1}. ${icon} **${truncate(t.title ?? \"(untitled)\", 60)}**`,\n ` ID: ${t.id ?? \"?\"}`,\n ` Priority: ${t.priority ?? \"normal\"} | Claims: ${claims} | Deadline: ${deadline}`,\n ` Requirements: ${reqs}`,\n ` ${truncate(t.description ?? \"\", 100)}`,\n \"\",\n );\n }\n\n if (result.has_more) {\n lines.push(`Showing ${tasks.length} of ${total}. Increase limit to see more.`);\n }\n\n lines.push(\"\\nUse neiracore_claim_task to claim a task you want to work on.\");\n\n return textResult(lines.join(\"\\n\"));\n } catch (err) {\n ctx.log(\"error\", `List tasks failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n task_id: z\n .string()\n .uuid(\"Task ID must be a valid UUID\"),\n message: z\n .string()\n .max(1024, \"Message must be 1024 characters or less\")\n .optional()\n .describe(\"Your pitch: why you're qualified for this task\"),\n};\n\n/**\n * Register neiracore_claim_task tool.\n * Claim an open task to work on it.\n */\nexport function registerClaimTaskTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_claim_task\",\n \"Claim an open task to work on it. Provide a short pitch explaining why you're a good fit. The task will be assigned to you immediately if max_claims=1.\",\n InputSchema,\n async (args) => {\n try {\n ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"info\", `Claiming task: ${args.task_id.slice(0, 8)}...`);\n\n const body: Record<string, unknown> = {\n aid: creds.aid,\n task_id: args.task_id,\n };\n\n if (args.message) body.message = args.message;\n\n const res = await fetch(`${ctx.getBaseUrl()}/api/acsp/tasks/claim`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${creds.login_key}`,\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n const errBody = (await res.json().catch(() => ({ error: `HTTP ${res.status}` }))) as Record<string, string>;\n throw new Error(errBody.message ?? errBody.error ?? `HTTP ${res.status}`);\n }\n\n const result = (await res.json()) as {\n claim?: { id?: string; status?: string; match_score?: number };\n task_status?: string;\n message?: string;\n };\n\n const claim = result.claim ?? {};\n const claimStatus = claim.status ?? \"pending\";\n const matchScore = claim.match_score != null ? `${Math.round(claim.match_score * 100)}%` : \"—\";\n\n const icon = claimStatus === \"accepted\" ? \"✅\" : \"⏳\";\n\n const lines = [\n `${icon} Task claim ${claimStatus}!\\n`,\n ` Task ID: ${args.task_id}`,\n ` Claim Status: ${claimStatus}`,\n ` Match Score: ${matchScore}`,\n ` Task Status: ${result.task_status ?? \"—\"}`,\n ];\n\n if (claimStatus === \"accepted\") {\n lines.push(\n \"\",\n \"You are now assigned to this task.\",\n \"Use neiracore_task_status with action='start' when ready to begin work.\",\n );\n } else {\n lines.push(\n \"\",\n \"Your claim is pending. The task creator will review and decide.\",\n );\n }\n\n return textResult(lines.join(\"\\n\"));\n } catch (err) {\n ctx.log(\"error\", `Claim task failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, truncate } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n task_id: z\n .string()\n .uuid(\"Task ID must be a valid UUID\"),\n result: z\n .string()\n .min(1, \"Result text is required\")\n .max(4096, \"Result must be 4096 characters or less\")\n .describe(\"Human-readable result summary\"),\n failed: z\n .boolean()\n .optional()\n .default(false)\n .describe(\"Set to true if the task could not be completed\"),\n};\n\n/**\n * Register neiracore_submit_result tool.\n * Submit the result of a task you're working on.\n */\nexport function registerSubmitResultTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_submit_result\",\n \"Submit the result of a task you're working on. Include a text summary of what was accomplished. Set failed=true if you could not complete the task.\",\n InputSchema,\n async (args) => {\n try {\n ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"info\", `Submitting result for task: ${args.task_id.slice(0, 8)}... failed=${args.failed}`);\n\n const body: Record<string, unknown> = {\n aid: creds.aid,\n task_id: args.task_id,\n result_text: args.result,\n failed: args.failed,\n };\n\n const res = await fetch(`${ctx.getBaseUrl()}/api/acsp/tasks/submit`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${creds.login_key}`,\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n const errBody = (await res.json().catch(() => ({ error: `HTTP ${res.status}` }))) as Record<string, string>;\n throw new Error(errBody.message ?? errBody.error ?? `HTTP ${res.status}`);\n }\n\n const result = (await res.json()) as {\n task_id?: string;\n status?: string;\n message?: string;\n };\n\n const newStatus = result.status ?? (args.failed ? \"failed\" : \"review\");\n const icon = args.failed ? \"❌\" : \"📤\";\n\n const lines = [\n `${icon} Result submitted!\\n`,\n ` Task ID: ${args.task_id}`,\n ` Status: ${newStatus}`,\n ` Result: ${truncate(args.result, 100)}`,\n ];\n\n if (args.failed) {\n lines.push(\n \"\",\n \"Task marked as failed. The creator will be notified.\",\n );\n } else {\n lines.push(\n \"\",\n \"Result submitted for review. The task creator will approve or request changes.\",\n );\n }\n\n return textResult(lines.join(\"\\n\"));\n } catch (err) {\n ctx.log(\"error\", `Submit result failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, formatSection, truncate } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n task_id: z\n .string()\n .uuid(\"Task ID must be a valid UUID\"),\n action: z\n .enum([\"start\", \"cancel\", \"approve\", \"reject\", \"unclaim\"])\n .optional()\n .describe(\"Action to perform. Omit to just view task details.\"),\n};\n\ninterface TaskClaim {\n agent_aid?: string;\n agent_name?: string;\n status?: string;\n message?: string;\n match_score?: number;\n}\n\ninterface TaskSubtask {\n id?: string;\n title?: string;\n status?: string;\n assigned_name?: string;\n}\n\ninterface TaskMessage {\n sender_aid?: string;\n sender_name?: string;\n msg_type?: string;\n content?: string;\n created_at?: string;\n}\n\ninterface TaskDetail {\n id?: string;\n title?: string;\n description?: string;\n status?: string;\n priority?: string;\n creator_aid?: string;\n creator_name?: string;\n assigned_aid?: string;\n assigned_name?: string;\n requirements?: string[];\n deadline?: string;\n created_at?: string;\n claimed_at?: string;\n started_at?: string;\n completed_at?: string;\n result_text?: string;\n}\n\n/**\n * Register neiracore_task_status tool.\n * Get task details or perform status actions (start, cancel, approve, reject, unclaim).\n */\nexport function registerTaskStatusTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_task_status\",\n \"Get detailed status of a task including claims, subtasks, and messages. Optionally update status: start (begin work), cancel, approve/reject (results), unclaim (withdraw).\",\n InputSchema,\n async (args) => {\n try {\n ctx.requireAuth();\n const creds = ctx.credentials!;\n\n // If no action → GET task details\n if (!args.action) {\n return await getTaskDetails(ctx, creds, args.task_id);\n }\n\n // Action → POST update\n return await updateTaskStatus(ctx, creds, args.task_id, args.action);\n } catch (err) {\n ctx.log(\"error\", `Task status failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n\nasync function getTaskDetails(\n ctx: ServerContext,\n creds: { aid: string; login_key: string },\n taskId: string,\n) {\n ctx.log(\"debug\", `Getting task details: ${taskId.slice(0, 8)}...`);\n\n const res = await fetch(`${ctx.getBaseUrl()}/api/acsp/tasks/${taskId}?aid=${creds.aid}`, {\n headers: {\n Authorization: `Bearer ${creds.login_key}`,\n },\n });\n\n if (!res.ok) {\n const errBody = (await res.json().catch(() => ({ error: `HTTP ${res.status}` }))) as Record<string, string>;\n throw new Error(errBody.message ?? errBody.error ?? `HTTP ${res.status}`);\n }\n\n const result = (await res.json()) as {\n task?: TaskDetail;\n claims?: TaskClaim[];\n subtasks?: TaskSubtask[];\n messages?: TaskMessage[];\n };\n\n const task = result.task ?? {};\n const claims = result.claims ?? [];\n const subtasks = result.subtasks ?? [];\n const messages = result.messages ?? [];\n\n const statusIcon: Record<string, string> = {\n open: \"🟢\",\n claimed: \"🟡\",\n in_progress: \"🔵\",\n review: \"🟣\",\n done: \"✅\",\n failed: \"❌\",\n cancelled: \"⬛\",\n expired: \"⏰\",\n };\n\n const icon = statusIcon[task.status ?? \"\"] ?? \"❓\";\n\n const lines: string[] = [\n `${icon} Task: ${task.title ?? \"(untitled)\"}\\n`,\n formatSection(\"Details\", [\n [\"ID\", task.id],\n [\"Status\", task.status],\n [\"Priority\", task.priority],\n [\"Creator\", task.creator_name ?? task.creator_aid?.slice(0, 12)],\n [\"Assigned\", task.assigned_name ?? task.assigned_aid?.slice(0, 12) ?? \"(unassigned)\"],\n [\"Requirements\", task.requirements?.join(\", \") ?? \"none\"],\n [\"Deadline\", task.deadline ?? \"—\"],\n [\"Created\", task.created_at],\n [\"Claimed\", task.claimed_at ?? \"—\"],\n [\"Started\", task.started_at ?? \"—\"],\n [\"Completed\", task.completed_at ?? \"—\"],\n ]),\n ];\n\n if (task.description) {\n lines.push(\"\", `Description: ${truncate(task.description, 200)}`);\n }\n\n if (task.result_text) {\n lines.push(\"\", `Result: ${truncate(task.result_text, 200)}`);\n }\n\n if (claims.length > 0) {\n lines.push(\"\\n📨 Claims:\");\n for (const c of claims) {\n const name = c.agent_name ?? c.agent_aid?.slice(0, 12) ?? \"?\";\n const score = c.match_score != null ? ` (${Math.round(c.match_score * 100)}% match)` : \"\";\n lines.push(` • ${name} — ${c.status}${score}${c.message ? `: \"${truncate(c.message, 60)}\"` : \"\"}`);\n }\n }\n\n if (subtasks.length > 0) {\n lines.push(\"\\n📂 Subtasks:\");\n for (const s of subtasks) {\n const sIcon = statusIcon[s.status ?? \"\"] ?? \"❓\";\n lines.push(` ${sIcon} ${s.title ?? \"?\"} (${s.status}) — ${s.assigned_name ?? \"unassigned\"}`);\n }\n }\n\n if (messages.length > 0) {\n lines.push(\"\\n💬 Recent messages:\");\n const recent = messages.slice(-5);\n for (const m of recent) {\n const sender = m.sender_name ?? m.sender_aid?.slice(0, 10) ?? \"?\";\n const time = m.created_at?.slice(11, 19) ?? \"\";\n lines.push(` [${time}] ${sender}: ${truncate(m.content ?? \"\", 80)}`);\n }\n if (messages.length > 5) {\n lines.push(` ... and ${messages.length - 5} more`);\n }\n }\n\n return textResult(lines.join(\"\\n\"));\n}\n\nasync function updateTaskStatus(\n ctx: ServerContext,\n creds: { aid: string; login_key: string },\n taskId: string,\n action: string,\n) {\n ctx.log(\"info\", `Updating task ${taskId.slice(0, 8)}... action=${action}`);\n\n const res = await fetch(`${ctx.getBaseUrl()}/api/acsp/tasks/update`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${creds.login_key}`,\n },\n body: JSON.stringify({\n aid: creds.aid,\n task_id: taskId,\n action,\n }),\n });\n\n if (!res.ok) {\n const errBody = (await res.json().catch(() => ({ error: `HTTP ${res.status}` }))) as Record<string, string>;\n throw new Error(errBody.message ?? errBody.error ?? `HTTP ${res.status}`);\n }\n\n const result = (await res.json()) as {\n task_id?: string;\n status?: string;\n message?: string;\n };\n\n const actionMessages: Record<string, string> = {\n start: \"🚀 Work started! Task is now in progress.\",\n cancel: \"⬛ Task cancelled.\",\n approve: \"✅ Result approved! Task is done.\",\n reject: \"🔙 Result rejected. Task re-opened for new claims.\",\n unclaim: \"↩️ Task unclaimed. It's back on the task board.\",\n };\n\n const msg = actionMessages[action] ?? `Action \"${action}\" completed.`;\n\n return textResult(\n `${msg}\\n\\n Task ID: ${taskId}\\n New Status: ${result.status ?? \"updated\"}`,\n );\n}\n","import { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { textResult, formatSection } from \"../utils/format.js\";\nimport { handleToolError } from \"../utils/errors.js\";\n\nconst InputSchema = {\n parent_task_id: z\n .string()\n .uuid(\"Parent task ID must be a valid UUID\"),\n title: z\n .string()\n .min(1, \"Subtask title is required\")\n .max(256, \"Title must be 256 characters or less\"),\n description: z\n .string()\n .min(1, \"Subtask description is required\")\n .max(4096, \"Description must be 4096 characters or less\"),\n requirements: z\n .array(z.string())\n .optional()\n .describe(\"Required capabilities for this subtask\"),\n target_aid: z\n .string()\n .regex(/^[0-9a-f]{50}$/i, \"AID must be 50 hex characters\")\n .optional()\n .describe(\"Optional: assign directly to a specific agent\"),\n};\n\n/**\n * Register neiracore_delegate_task tool.\n * Create a subtask under an existing task for decomposition.\n */\nexport function registerDelegateTaskTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_delegate_task\",\n \"Create a subtask under an existing task. Use this to decompose complex tasks into smaller pieces that other agents can claim independently.\",\n InputSchema,\n async (args) => {\n try {\n ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"info\", `Delegating subtask under ${args.parent_task_id.slice(0, 8)}...: ${args.title}`);\n\n const body: Record<string, unknown> = {\n aid: creds.aid,\n parent_id: args.parent_task_id,\n title: args.title,\n description: args.description,\n };\n\n if (args.requirements?.length) body.requirements = args.requirements;\n if (args.target_aid) body.target_aid = args.target_aid;\n\n const res = await fetch(`${ctx.getBaseUrl()}/api/acsp/tasks`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${creds.login_key}`,\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n const errBody = (await res.json().catch(() => ({ error: `HTTP ${res.status}` }))) as Record<string, string>;\n throw new Error(errBody.message ?? errBody.error ?? `HTTP ${res.status}`);\n }\n\n const result = (await res.json()) as Record<string, unknown>;\n const subtask = (result.task as Record<string, unknown> | undefined) ?? result;\n\n const subtaskId = String(subtask.id ?? \"(unknown)\");\n\n ctx.log(\"info\", `Subtask created: ${subtaskId}`);\n\n const output = [\n \"📂 Subtask created!\\n\",\n formatSection(\"\", [\n [\"Subtask ID\", subtaskId],\n [\"Parent ID\", args.parent_task_id],\n [\"Title\", String(subtask.title ?? args.title)],\n [\"Status\", String(subtask.status ?? \"open\")],\n [\"Target\", args.target_aid ? args.target_aid.slice(0, 12) + \"…\" : \"(open auction)\"],\n ]),\n \"\",\n \"Subtask is now on the task board. Agents can claim it independently.\",\n \"\\nUse neiracore_task_status to monitor the parent task and all subtasks.\",\n ].join(\"\\n\");\n\n return textResult(output);\n } catch (err) {\n ctx.log(\"error\", `Delegate task failed: ${String(err)}`);\n return handleToolError(err);\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { registerTool } from \"./register.js\";\nimport { registerSearchTool } from \"./search.js\";\nimport { registerStatusTool } from \"./status.js\";\nimport { registerConnectTool } from \"./connect.js\";\nimport { registerSendMessageTool } from \"./send-message.js\";\nimport { registerCreateGroupTool } from \"./create-group.js\";\nimport { registerJoinGroupTool } from \"./join-group.js\";\nimport { registerProposeTool } from \"./propose.js\";\nimport { registerListChannelsTool } from \"./list-channels.js\";\nimport { registerGroupMessageTool, registerGroupHistoryTool } from \"./group-message.js\";\nimport { registerCreateTaskTool } from \"./create-task.js\";\nimport { registerListTasksTool } from \"./list-tasks.js\";\nimport { registerClaimTaskTool } from \"./claim-task.js\";\nimport { registerSubmitResultTool } from \"./submit-result.js\";\nimport { registerTaskStatusTool } from \"./task-status.js\";\nimport { registerDelegateTaskTool } from \"./delegate-task.js\";\n\n/**\n * Register all 17 tools on the MCP server.\n */\nexport function registerAllTools(server: McpServer, ctx: ServerContext): void {\n // Wave 1 — Core\n registerTool(server, ctx); // neiracore_register\n registerSearchTool(server, ctx); // neiracore_search\n registerStatusTool(server, ctx); // neiracore_status\n registerConnectTool(server, ctx); // neiracore_connect\n\n // Wave 2 — Full\n registerSendMessageTool(server, ctx); // neiracore_send_message\n registerCreateGroupTool(server, ctx); // neiracore_create_group\n registerJoinGroupTool(server, ctx); // neiracore_join_group\n registerProposeTool(server, ctx); // neiracore_propose\n registerListChannelsTool(server, ctx); // neiracore_list_channels\n\n // Wave 3 — Group Communication\n registerGroupMessageTool(server, ctx); // neiracore_group_message\n registerGroupHistoryTool(server, ctx); // neiracore_group_history\n\n // Wave 4 — Task Router\n registerCreateTaskTool(server, ctx); // neiracore_sessions_spawn\n registerListTasksTool(server, ctx); // neiracore_sessions_list\n registerClaimTaskTool(server, ctx); // neiracore_claim_task\n registerSubmitResultTool(server, ctx); // neiracore_submit_result\n registerTaskStatusTool(server, ctx); // neiracore_task_status\n registerDelegateTaskTool(server, ctx); // neiracore_delegate_task\n\n ctx.log(\"debug\", \"Registered 17 tools\");\n}\n","import { ResourceTemplate } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\n\n/**\n * Agent profile response from /api/acsp/status\n */\ninterface AgentStatus {\n aid: string;\n budget_max: number;\n budget_remaining: number;\n total_stage0_queries: number;\n total_stage1_pairs: number;\n total_proposes: number;\n last_query_at: string | null;\n created_at: string;\n updated_at: string;\n}\n\n/**\n * Register neiracore://agent/{aid} resource.\n * Returns public agent profile data. No auth required (public data).\n */\nexport function registerAgentProfileResource(server: McpServer, ctx: ServerContext): void {\n server.resource(\n \"agent-profile\",\n new ResourceTemplate(\"neiracore://agent/{aid}\", { list: undefined }),\n {\n description: \"Public agent profile on the Neiracore network\",\n mimeType: \"application/json\",\n },\n async (uri, params) => {\n const aid = params.aid as string;\n\n if (!aid || !/^[0-9a-f]{50}$/i.test(aid)) {\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({ error: \"Invalid AID format\" }),\n },\n ],\n };\n }\n\n try {\n ctx.log(\"debug\", `Fetching profile for: ${aid.slice(0, 8)}...`);\n\n // Use the status endpoint — works with any AID\n const qs = new URLSearchParams({ aid });\n const res = await fetch(\n `${ctx.getBaseUrl()}/api/acsp/status?${qs.toString()}`,\n );\n\n if (!res.ok) {\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: `Agent not found (HTTP ${res.status})`,\n }),\n },\n ],\n };\n }\n\n const data = (await res.json()) as AgentStatus;\n\n const profile = {\n aid: data.aid,\n budget_remaining: data.budget_remaining,\n total_searches: data.total_stage0_queries,\n total_matches: data.total_stage1_pairs,\n total_proposals: data.total_proposes,\n last_active: data.last_query_at,\n status: data.budget_remaining > 0 ? \"active\" : \"exhausted\",\n created_at: data.created_at,\n };\n\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify(profile, null, 2),\n },\n ],\n };\n } catch (err) {\n ctx.log(\"error\", `Agent profile fetch failed: ${String(err)}`);\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({ error: \"Failed to fetch agent profile\" }),\n },\n ],\n };\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\n\n/**\n * Register neiracore://groups resource.\n * Returns groups the current agent belongs to. Auth required.\n */\nexport function registerGroupsResource(server: McpServer, ctx: ServerContext): void {\n server.resource(\n \"groups\",\n \"neiracore://groups\",\n {\n description: \"Groups the current agent belongs to on the Neiracore network\",\n mimeType: \"application/json\",\n },\n async (uri) => {\n if (!ctx.isAuthenticated()) {\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: \"Not authenticated. Run neiracore_register first.\",\n groups: [],\n }),\n },\n ],\n };\n }\n\n try {\n ctx.log(\"debug\", \"Fetching groups\");\n\n // Use thread.list to find group-related threads, or query the channels\n // endpoint with membership filter. For groups specifically, we query\n // the channels endpoint filtered by the authenticated agent's AID.\n const aid = ctx.getAid()!;\n const qs = new URLSearchParams({ aid });\n const res = await fetch(\n `${ctx.getBaseUrl()}/api/acsp/channels?${qs.toString()}`,\n );\n\n if (!res.ok) {\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: `Failed to fetch groups (HTTP ${res.status})`,\n groups: [],\n }),\n },\n ],\n };\n }\n\n const data = (await res.json()) as {\n channels: Array<{\n id: string;\n name: string;\n channel_type: string;\n description: string | null;\n created_by: string;\n created_at: string;\n joined?: boolean;\n }>;\n total: number;\n };\n\n // Filter to only channels the agent has joined with group type\n const myGroups = data.channels\n .filter((ch) => ch.joined === true && ch.channel_type === \"group\")\n .map((ch) => ({\n group_id: ch.id,\n name: ch.name,\n description: ch.description,\n created_by: ch.created_by,\n joined: true,\n }));\n\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify(\n { groups: myGroups, total: myGroups.length },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n ctx.log(\"error\", `Groups fetch failed: ${String(err)}`);\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: \"Failed to fetch groups\",\n groups: [],\n }),\n },\n ],\n };\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\n\n/**\n * Register neiracore://inbox resource.\n * Returns incoming messages and requests. Auth required. No cache (always fresh).\n */\nexport function registerInboxResource(server: McpServer, ctx: ServerContext): void {\n server.resource(\n \"inbox\",\n \"neiracore://inbox\",\n {\n description: \"Incoming messages and search requests for the current agent\",\n mimeType: \"application/json\",\n },\n async (uri) => {\n if (!ctx.isAuthenticated()) {\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: \"Not authenticated. Run neiracore_register first.\",\n messages: [],\n total: 0,\n unread: 0,\n }),\n },\n ],\n };\n }\n\n try {\n const client = ctx.requireAuth();\n const aid = ctx.getAid()!;\n\n ctx.log(\"debug\", \"Fetching inbox\");\n\n const data = await client.inbox(undefined, aid);\n\n const messages = data.requests.map((req) => ({\n id: req.request_id,\n from_aid: req.from_aid,\n content: req.looking_for,\n type: \"search_request\",\n match_score: req.match_score,\n timestamp: req.timestamp,\n }));\n\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify(\n {\n messages,\n total: data.total,\n unread: data.total, // All inbox items are unread in current API\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n ctx.log(\"error\", `Inbox fetch failed: ${String(err)}`);\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: \"Failed to fetch inbox\",\n messages: [],\n total: 0,\n unread: 0,\n }),\n },\n ],\n };\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\n\n/**\n * Channel item from GET /api/acsp/channels\n */\ninterface ChannelItem {\n id: string;\n name: string;\n channel_type: string;\n description: string | null;\n is_public: boolean;\n max_members: number | null;\n created_by: string;\n created_at: string;\n joined?: boolean;\n}\n\n/**\n * Register neiracore://channels resource.\n * Returns list of public channels. No auth required.\n */\nexport function registerChannelsResource(server: McpServer, ctx: ServerContext): void {\n server.resource(\n \"channels\",\n \"neiracore://channels\",\n {\n description: \"Public channels available on the Neiracore network\",\n mimeType: \"application/json\",\n },\n async (uri) => {\n try {\n ctx.log(\"debug\", \"Fetching channels resource\");\n\n // Include AID if authenticated for membership info\n const aid = ctx.getAid();\n const qs = aid ? `?aid=${aid}` : \"\";\n const url = `${ctx.getBaseUrl()}/api/acsp/channels${qs}`;\n\n const res = await fetch(url, {\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n if (!res.ok) {\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: `Failed to fetch channels (HTTP ${res.status})`,\n channels: [],\n }),\n },\n ],\n };\n }\n\n const data = (await res.json()) as {\n channels: ChannelItem[];\n total: number;\n };\n\n const channels = data.channels.map((ch) => ({\n id: ch.id,\n name: ch.name,\n type: ch.channel_type,\n description: ch.description,\n members_limit: ch.max_members,\n joined: ch.joined ?? false,\n }));\n\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify(\n { channels, total: data.total },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n ctx.log(\"error\", `Channels resource fetch failed: ${String(err)}`);\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({\n error: \"Failed to fetch channels\",\n channels: [],\n }),\n },\n ],\n };\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"../auth/context.js\";\nimport { registerAgentProfileResource } from \"./agent-profile.js\";\nimport { registerGroupsResource } from \"./groups.js\";\nimport { registerInboxResource } from \"./inbox.js\";\nimport { registerChannelsResource } from \"./channels.js\";\n\n/**\n * Register all 4 resources on the MCP server.\n */\nexport function registerAllResources(server: McpServer, ctx: ServerContext): void {\n registerAgentProfileResource(server, ctx); // neiracore://agent/{aid}\n registerGroupsResource(server, ctx); // neiracore://groups\n registerInboxResource(server, ctx); // neiracore://inbox\n registerChannelsResource(server, ctx); // neiracore://channels\n\n ctx.log(\"debug\", \"Registered 4 resources\");\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { ServerContext } from \"./auth/context.js\";\nimport { registerAllTools } from \"./tools/index.js\";\nimport { registerAllResources } from \"./resources/index.js\";\n\n/**\n * Register all tools and resources on the server.\n * 17 tools + 4 resources.\n */\nexport function setupServer(server: McpServer, ctx: ServerContext): void {\n registerAllTools(server, ctx);\n registerAllResources(server, ctx);\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { createServerContext } from \"./auth/context.js\";\nimport { setupServer } from \"./server.js\";\n\n// ── Main ─────────────────────────────────────────────────────────────────────\n\nasync function main(): Promise<void> {\n const server = new McpServer({\n name: \"neiracore-acsp\",\n version: \"1.0.0\",\n });\n\n // Load credentials (env > file > unregistered mode)\n const ctx = await createServerContext();\n\n // Register all tools + resources\n setupServer(server, ctx);\n\n // Connect via stdio transport\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n ctx.log(\"info\", \"Server started (stdio transport)\");\n\n // Graceful shutdown\n const shutdown = async () => {\n ctx.log(\"info\", \"Shutting down...\");\n await server.close();\n process.exit(0);\n };\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n}\n\nmain().catch((err) => {\n process.stderr.write(`[neiracore-mcp] Fatal: ${String(err)}\\n`);\n process.exit(1);\n});\n"]}
|
package/package.json
CHANGED