{"_id":"@aegis-fluxion/mcp-adapter","name":"@aegis-fluxion/mcp-adapter","dist-tags":{"latest":"0.7.0"},"versions":{"0.7.0":{"name":"@aegis-fluxion/mcp-adapter","version":"0.7.0","description":"MCP transport adapter over aegis-fluxion encrypted WebSocket tunnels.","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs","default":"./dist/index.js"}},"publishConfig":{"access":"public"},"sideEffects":false,"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit","test":"vitest run --passWithNoTests","test:watch":"vitest --passWithNoTests","clean":"node -e \"import('node:fs').then(({ rmSync }) => rmSync('dist', { recursive: true, force: true }))\"","prepublishOnly":"npm run clean && npm run build && npm run typecheck && npm run test"},"dependencies":{"@aegis-fluxion/core":"^0.7.0"},"devDependencies":{"tsup":"^8.3.5","typescript":"^5.8.3","vitest":"^3.2.4"},"engines":{"node":">=18.18.0"},"keywords":["mcp","model-context-protocol","websocket","secure-transport","aes-gcm","json-rpc"],"license":"MIT","gitHead":"ba06a4a4d27ce414f74bec2f68c5a88265b78578","_id":"@aegis-fluxion/mcp-adapter@0.7.0","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-W7mr2Do4gdye2JfST0DCQiO61KqxiO19YIgLm/V2m/nhFb1bSgCzUOvcUl1gehYrcUHa8MvIcQyCkTiFBFdDQQ==","shasum":"46327f20be6ecbced0b47711c67818954cfd750a","tarball":"https://registry.npmjs.org/@aegis-fluxion/mcp-adapter/-/mcp-adapter-0.7.0.tgz","fileCount":8,"unpackedSize":92647,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDAzlB2DOXks6yg++y//FnD/jeJDwV3oxTkDGW/yEUJNQIgRmdhZGyNTzGv7AIV0AZE6NGnzB9KJ8sGLe59e1qieD4="}]},"_npmUser":{"name":"donboz","email":"muratbatak052005@gmail.com"},"directories":{},"maintainers":[{"name":"donboz","email":"muratbatak052005@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-adapter_0.7.0_1776277791573_0.24080903283593513"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-15T18:29:51.494Z","0.7.0":"2026-04-15T18:29:51.759Z","modified":"2026-04-15T18:29:51.982Z"},"maintainers":[{"name":"donboz","email":"muratbatak052005@gmail.com"}],"description":"MCP transport adapter over aegis-fluxion encrypted WebSocket tunnels.","keywords":["mcp","model-context-protocol","websocket","secure-transport","aes-gcm","json-rpc"],"license":"MIT","readme":"# @aegis-fluxion/mcp-adapter\r\n\r\nEncrypted MCP transport adapter for the `aegis-fluxion` ecosystem.\r\n\r\nThis package provides `SecureMCPTransport`, a JSON-RPC 2.0 transport that carries MCP-compatible\r\nmessages over `@aegis-fluxion/core` encrypted WebSocket tunnels (`SecureClient`/`SecureServer`).\r\n\r\nVersion: **0.7.0**\r\n\r\n---\r\n\r\n## Why this package\r\n\r\n- Replace stdio/SSE transport with encrypted WebSocket tunnels\r\n- Reuse existing ECDH + AES-256-GCM channel security\r\n- Bind one server-side transport to one authenticated socket (`clientId`)\r\n- Keep MCP message format strict with normalization and guards\r\n\r\n---\r\n\r\n## Install\r\n\r\n```bash\r\nnpm install @aegis-fluxion/mcp-adapter @aegis-fluxion/core ws\r\n```\r\n\r\n---\r\n\r\n## Core API\r\n\r\n### `SecureMCPTransport`\r\n\r\n```ts\r\nnew SecureMCPTransport({\r\n  mode: \"client\",\r\n  client: secureClient,\r\n  channel?: \"mcp:jsonrpc\",\r\n  connectTimeoutMs?: 10000\r\n});\r\n\r\nnew SecureMCPTransport({\r\n  mode: \"server\",\r\n  server: secureServer,\r\n  clientId: \"socket-id\",\r\n  channel?: \"mcp:jsonrpc\",\r\n  closeCode?: 1000,\r\n  closeReason?: \"Secure MCP transport closed.\"\r\n});\r\n```\r\n\r\nLifecycle and messaging methods:\r\n\r\n- `start(): Promise<void>`\r\n- `send(message: SecureMCPMessage): Promise<void>`\r\n- `close(): Promise<void>`\r\n- `onmessage?: (message) => void | Promise<void>`\r\n- `onerror?: (error) => void | Promise<void>`\r\n- `onclose?: () => void | Promise<void>`\r\n\r\n---\r\n\r\n## End-to-end example (client + server transport)\r\n\r\n```ts\r\nimport { SecureClient, SecureServer } from \"@aegis-fluxion/core\";\r\nimport { SecureMCPTransport, type SecureMCPMessage } from \"@aegis-fluxion/mcp-adapter\";\r\n\r\nconst secureServer = new SecureServer({ host: \"127.0.0.1\", port: 9093 });\r\n\r\nsecureServer.use(async (context, next) => {\r\n  if (context.phase === \"connection\") {\r\n    const authHeader = context.request.headers.authorization;\r\n    const token = Array.isArray(authHeader) ? authHeader[0] : authHeader;\r\n\r\n    if (token !== \"Bearer mcp-secure-token\") {\r\n      throw new Error(\"Unauthorized MCP client\");\r\n    }\r\n  }\r\n\r\n  await next();\r\n});\r\n\r\nsecureServer.on(\"connection\", async (client) => {\r\n  const serverTransport = new SecureMCPTransport({\r\n    mode: \"server\",\r\n    server: secureServer,\r\n    clientId: client.id\r\n  });\r\n\r\n  serverTransport.onmessage = async (message: SecureMCPMessage) => {\r\n    // Bridge into your MCP server runtime here.\r\n    console.log(\"Incoming MCP message on server\", message);\r\n  };\r\n\r\n  await serverTransport.start();\r\n});\r\n\r\nconst secureClient = new SecureClient(\"ws://127.0.0.1:9093\", {\r\n  wsOptions: {\r\n    headers: {\r\n      authorization: \"Bearer mcp-secure-token\"\r\n    }\r\n  }\r\n});\r\n\r\nconst clientTransport = new SecureMCPTransport({\r\n  mode: \"client\",\r\n  client: secureClient\r\n});\r\n\r\nclientTransport.onmessage = async (message: SecureMCPMessage) => {\r\n  console.log(\"Incoming MCP message on client\", message);\r\n};\r\n\r\nawait clientTransport.start();\r\n\r\nawait clientTransport.send({\r\n  jsonrpc: \"2.0\",\r\n  id: 1,\r\n  method: \"tools/list\",\r\n  params: {}\r\n});\r\n```\r\n\r\n---\r\n\r\n## Message helpers\r\n\r\nThe package exports guards and normalization helpers to harden integration points:\r\n\r\n- `normalizeSecureMCPMessage(candidate)`\r\n- `isSecureMCPRequest(message)`\r\n- `isSecureMCPNotification(message)`\r\n- `isSecureMCPResponse(message)`\r\n\r\n---\r\n\r\n## Security notes\r\n\r\n- MCP message payloads are transported through the same encrypted channel as application events.\r\n- Handshake and key lifecycle are managed by `@aegis-fluxion/core`.\r\n- Server transport mode routes messages to a specific socket by `clientId`, reducing accidental\r\n  cross-session fanout.\r\n\r\n---\r\n\r\n## License\r\n\r\nMIT\r\n","readmeFilename":"README.md","_rev":"1-cffe9ffd6f90635357b50feacec1233d"}