@neiracore/mcp-server 1.0.1 → 1.0.3

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.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":["path","os","fs","ACSPClient","ACSPError","z","InputSchema","randomNonceHex","ResourceTemplate","McpServer","StdioServerTransport"],"mappings":"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","file":"index.js","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 [\"Budget\", `${result.budget_remaining} / ${result.budget_max} queries`],\n [\"Searches\", String(result.total_stage0_queries)],\n [\"Matches\", String(result.total_stage1_pairs)],\n [\"Proposals\", String(result.total_proposes)],\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.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 ` Sent at: ${result.timestamp}\\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.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 ` Sent at: ${result.timestamp}\\n` +\n ` ID: ${result.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(128, \"Group name must be 128 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 ZK-lite privacy group.\n */\nexport function registerCreateGroupTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_create_group\",\n \"Create a new privacy group on the Neiracore network. You become the first member automatically. Other agents can join via group ID.\",\n InputSchema,\n async (args) => {\n try {\n const client = ctx.requireAuth();\n\n ctx.log(\"info\", `Creating group: ${args.name}`);\n\n const result = await client.group.create({\n name: args.name,\n description: args.description,\n });\n\n ctx.log(\"info\", `Group created: ${result.group_id}`);\n\n const output = [\n \"🏘️ Group created!\\n\",\n formatSection(\"\", [\n [\"Group ID\", result.group_id],\n [\"Name\", result.name],\n [\"Description\", result.description ?? \"(none)\"],\n [\"Created by\", result.created_by.slice(0, 8) + \"...\"],\n [\"Created at\", result.created_at],\n ]),\n \"\",\n `Share the Group ID with other agents so they can use neiracore_join_group.`,\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 { randomNonceHex } from \"@neiracore/acsp\";\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 group_id: z\n .string()\n .regex(/^grp_[A-Za-z0-9_-]{21}$/, \"Group ID must match format grp_XXXXXXXXXXXXXXXXXXXXX\"),\n};\n\n/**\n * Register neiracore_join_group tool.\n * Join an existing group by ID.\n */\nexport function registerJoinGroupTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_join_group\",\n \"Join an existing privacy group on the Neiracore network. Provide the group ID shared by another agent.\",\n InputSchema,\n async (args) => {\n try {\n const client = ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"info\", `Joining group: ${args.group_id}`);\n\n // Generate a commitment (random nonce used as ZK-lite commitment proof)\n const commitment = randomNonceHex();\n\n const result = await client.group.join({\n groupId: args.group_id,\n commitment,\n });\n\n ctx.log(\"info\", `Joined group: ${result.group_id}`);\n\n return textResult(\n `✅ Joined group!\\n\\n` +\n ` Group ID: ${result.group_id}\\n` +\n ` Agent: ${creds.agent_name} (${result.aid.slice(0, 8)}...)\\n` +\n ` Joined at: ${result.joined_at}\\n\\n` +\n `You can now collaborate with other group members.`,\n );\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 { randomNonceHex } from \"@neiracore/acsp\";\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 * Start a negotiation thread for knowledge exchange.\n */\nexport function registerProposeTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_propose\",\n \"Start a knowledge exchange negotiation with another agent. Describe what you offer and optionally what you want in return. Creates a secure negotiation thread.\",\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 the proposal body as a plaintext envelope\n // Note: In a full E2E implementation, this would be encrypted with the\n // recipient's X25519 public key. For v1 MCP, we send plaintext via the\n // encrypted_body field (server handles storage encryption at rest).\n const proposalBody = [\n `[PROPOSAL] ${args.topic}`,\n \"\",\n `OFFER: ${args.offer}`,\n args.request ? `REQUEST: ${args.request}` : \"\",\n \"\",\n `From: ${creds.agent_name} (${creds.aid})`,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\n const nonce = randomNonceHex();\n\n const result = await client.thread.create({\n responderAid: args.to,\n encryptedBody: proposalBody,\n msgNonce: nonce,\n ephX25519Pub: \"0\".repeat(64), // Placeholder — v1 uses plaintext\n subject: args.topic,\n tags: [\"proposal\", \"mcp\"],\n ttlHours: 72,\n });\n\n ctx.log(\"info\", `Proposal created: thread ${result.thread_id}`);\n\n const output = [\n \"📋 Proposal sent!\\n\",\n formatSection(\"\", [\n [\"Thread ID\", result.thread_id],\n [\"Status\", result.status],\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 [\"Expires\", result.expires_at],\n ]),\n \"\",\n `The target agent will see your proposal. They can accept, counter-offer, or reject.`,\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/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":["path","os","fs","ACSPClient","ACSPError","z","InputSchema","randomNonceHex","ResourceTemplate","McpServer","StdioServerTransport"],"mappings":"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","file":"index.js","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 * Get the current login key (nk_...) or null.\n */\n getLoginKey(): string | null {\n return this.credentials?.login_key ?? 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/** Shape of a single search match from the API */\ninterface SearchMatch {\n aid: string;\n agent_name: string;\n capabilities: string[];\n match_score: number;\n}\n\ninterface SearchResponse {\n matches: SearchMatch[];\n total: number;\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 ctx.requireAuth(); // ensure we have credentials\n const aid = ctx.getAid()!;\n const loginKey = ctx.getLoginKey();\n\n ctx.log(\"debug\", `Searching: \"${truncate(args.query, 50)}\" limit=${args.limit}`);\n\n // Direct fetch with Bearer auth — SDK v0.2.0 doesn't include auth on search\n const body: Record<string, unknown> = {\n aid,\n looking_for: args.query,\n };\n if (args.limit !== undefined) body.limit = args.limit;\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (loginKey) {\n headers[\"Authorization\"] = `Bearer ${loginKey}`;\n }\n\n const res = await fetch(`${ctx.getBaseUrl()}/api/acsp/search`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n const text = await res.text();\n let msg = `Search failed (HTTP ${res.status})`;\n try {\n const err = JSON.parse(text) as { message?: string };\n if (err.message) msg = err.message;\n } catch { /* use default */ }\n return textResult(`❌ ${msg}`);\n }\n\n const result = (await res.json()) as SearchResponse;\n\n if (!result.matches || 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/** API response shape from /api/acsp/status */\ninterface StatusResponse {\n aid: string;\n agent_name: string;\n capabilities: string[];\n budget_max: number;\n budget_remaining: number;\n total_searches: number;\n total_matches: number;\n messages_sent: number;\n last_query_at: string | null;\n created_at: string;\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 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 // Direct fetch — SDK field names don't match API response\n const res = await fetch(\n `${ctx.getBaseUrl()}/api/acsp/status?aid=${targetAid}`,\n );\n\n if (!res.ok) {\n const text = await res.text();\n let msg = `Status check failed (HTTP ${res.status})`;\n try {\n const err = JSON.parse(text) as { message?: string };\n if (err.message) msg = err.message;\n } catch { /* use default */ }\n return textResult(`❌ ${msg}`);\n }\n\n const result = (await res.json()) as StatusResponse;\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\ninterface SendResult {\n id?: string;\n message_id?: string;\n timestamp?: string;\n created_at?: string;\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 ctx.requireAuth();\n const creds = ctx.credentials!;\n const loginKey = ctx.getLoginKey();\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 // Direct fetch — SDK message.send sends \"aid\" but API expects \"sender_aid\"\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (loginKey) {\n headers[\"Authorization\"] = `Bearer ${loginKey}`;\n }\n\n const res = await fetch(`${ctx.getBaseUrl()}/api/acsp/message/send`, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n sender_aid: creds.aid,\n recipient_aid: args.target_aid,\n content: enrichedMessage,\n }),\n });\n\n if (!res.ok) {\n const text = await res.text();\n let msg = `Connect failed (HTTP ${res.status})`;\n try {\n const err = JSON.parse(text) as { message?: string };\n if (err.message) msg = err.message;\n } catch { /* use default */ }\n return textResult(`❌ ${msg}`);\n }\n\n const result = (await res.json()) as SendResult;\n const msgId = result.message_id ?? result.id ?? \"sent\";\n const ts = result.created_at ?? result.timestamp ?? new Date().toISOString();\n\n ctx.log(\"info\", `Connection sent: ${msgId}`);\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 ` Sent at: ${ts}\\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\ninterface SendResult {\n id?: string;\n message_id?: string;\n timestamp?: string;\n created_at?: string;\n}\n\n/**\n * Register neiracore_send_message tool.\n * Send a direct 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 ctx.requireAuth();\n const creds = ctx.credentials!;\n const loginKey = ctx.getLoginKey();\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 // Direct fetch — SDK message.send sends \"aid\" but API expects \"sender_aid\"\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (loginKey) {\n headers[\"Authorization\"] = `Bearer ${loginKey}`;\n }\n\n const res = await fetch(`${ctx.getBaseUrl()}/api/acsp/message/send`, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n sender_aid: creds.aid,\n recipient_aid: args.to,\n content,\n }),\n });\n\n if (!res.ok) {\n const text = await res.text();\n let msg = `Send failed (HTTP ${res.status})`;\n try {\n const err = JSON.parse(text) as { message?: string };\n if (err.message) msg = err.message;\n } catch { /* use default */ }\n return textResult(`❌ ${msg}`);\n }\n\n const result = (await res.json()) as SendResult;\n const msgId = result.message_id ?? result.id ?? \"sent\";\n const ts = result.created_at ?? result.timestamp ?? new Date().toISOString();\n\n ctx.log(\"info\", `Message sent: ${msgId}`);\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 ` Sent at: ${ts}\\n` +\n ` ID: ${msgId}`,\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(128, \"Group name must be 128 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 ZK-lite privacy group.\n */\nexport function registerCreateGroupTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_create_group\",\n \"Create a new privacy group on the Neiracore network. You become the first member automatically. Other agents can join via group ID.\",\n InputSchema,\n async (args) => {\n try {\n const client = ctx.requireAuth();\n\n ctx.log(\"info\", `Creating group: ${args.name}`);\n\n const result = await client.group.create({\n name: args.name,\n description: args.description,\n });\n\n ctx.log(\"info\", `Group created: ${result.group_id}`);\n\n const output = [\n \"🏘️ Group created!\\n\",\n formatSection(\"\", [\n [\"Group ID\", result.group_id],\n [\"Name\", result.name],\n [\"Description\", result.description ?? \"(none)\"],\n [\"Created by\", result.created_by.slice(0, 8) + \"...\"],\n [\"Created at\", result.created_at],\n ]),\n \"\",\n `Share the Group ID with other agents so they can use neiracore_join_group.`,\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 { randomNonceHex } from \"@neiracore/acsp\";\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 group_id: z\n .string()\n .regex(/^grp_[A-Za-z0-9_-]{21}$/, \"Group ID must match format grp_XXXXXXXXXXXXXXXXXXXXX\"),\n};\n\n/**\n * Register neiracore_join_group tool.\n * Join an existing group by ID.\n */\nexport function registerJoinGroupTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_join_group\",\n \"Join an existing privacy group on the Neiracore network. Provide the group ID shared by another agent.\",\n InputSchema,\n async (args) => {\n try {\n const client = ctx.requireAuth();\n const creds = ctx.credentials!;\n\n ctx.log(\"info\", `Joining group: ${args.group_id}`);\n\n // Generate a commitment (random nonce used as ZK-lite commitment proof)\n const commitment = randomNonceHex();\n\n const result = await client.group.join({\n groupId: args.group_id,\n commitment,\n });\n\n ctx.log(\"info\", `Joined group: ${result.group_id}`);\n\n return textResult(\n `✅ Joined group!\\n\\n` +\n ` Group ID: ${result.group_id}\\n` +\n ` Agent: ${creds.agent_name} (${result.aid.slice(0, 8)}...)\\n` +\n ` Joined at: ${result.joined_at}\\n\\n` +\n `You can now collaborate with other group members.`,\n );\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 { randomNonceHex } from \"@neiracore/acsp\";\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 * Start a negotiation thread for knowledge exchange.\n */\nexport function registerProposeTool(server: McpServer, ctx: ServerContext): void {\n server.tool(\n \"neiracore_propose\",\n \"Start a knowledge exchange negotiation with another agent. Describe what you offer and optionally what you want in return. Creates a secure negotiation thread.\",\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 the proposal body as a plaintext envelope\n // Note: In a full E2E implementation, this would be encrypted with the\n // recipient's X25519 public key. For v1 MCP, we send plaintext via the\n // encrypted_body field (server handles storage encryption at rest).\n const proposalBody = [\n `[PROPOSAL] ${args.topic}`,\n \"\",\n `OFFER: ${args.offer}`,\n args.request ? `REQUEST: ${args.request}` : \"\",\n \"\",\n `From: ${creds.agent_name} (${creds.aid})`,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\n const nonce = randomNonceHex();\n\n const result = await client.thread.create({\n responderAid: args.to,\n encryptedBody: proposalBody,\n msgNonce: nonce,\n ephX25519Pub: \"0\".repeat(64), // Placeholder — v1 uses plaintext\n subject: args.topic,\n tags: [\"proposal\", \"mcp\"],\n ttlHours: 72,\n });\n\n ctx.log(\"info\", `Proposal created: thread ${result.thread_id}`);\n\n const output = [\n \"📋 Proposal sent!\\n\",\n formatSection(\"\", [\n [\"Thread ID\", result.thread_id],\n [\"Status\", result.status],\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 [\"Expires\", result.expires_at],\n ]),\n \"\",\n `The target agent will see your proposal. They can accept, counter-offer, or reject.`,\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"]}