{"_id":"@a2akit/express","_rev":"2-f5871d9dd13e3ef9095432248fd45ea4","name":"@a2akit/express","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@a2akit/express","version":"0.1.0","keywords":["a2a","express","agent","ai","middleware","protocol","json-rpc"],"author":"","license":"MIT","_id":"@a2akit/express@0.1.0","maintainers":[{"name":"mcpkit-dev","email":"chechavalera@gmail.com"}],"homepage":"https://github.com/a2akit/a2akit/tree/main/packages/express#readme","bugs":{"url":"https://github.com/a2akit/a2akit/issues"},"dist":{"shasum":"54554a4b6d52a47a43e947ccf1a24f1d9c0235b9","tarball":"https://registry.npmjs.org/@a2akit/express/-/express-0.1.0.tgz","fileCount":8,"integrity":"sha512-Fg2niKMs9cTpOc8hUn+T+UowBI1kdI2V1reycKt44BdNnpjFI8vo8BrBMEdH04g48gzfFdqIdkMGawaoN2TRzw==","signatures":[{"sig":"MEUCIEIQH5IxlVJc3Tvvql9xSStvDbHY1AHmVG8muyV8UlfTAiEAr2l8I0SqZp2GsFtx9SdO6kwJoYABCoFN3LL7Qo49DHA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24493},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"bb05509f7e0cb8cf48989ed9e79c7f27e56e331f","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"mcpkit-dev","email":"chechavalera@gmail.com"},"repository":{"url":"git+https://github.com/a2akit/a2akit.git","type":"git","directory":"packages/express"},"_npmVersion":"10.9.0","description":"Express.js adapter for @a2akit/core A2A protocol servers","directories":{},"sideEffects":false,"_nodeVersion":"22.11.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^1.0.0","express":"^4.21.0","supertest":"^7.0.0","typescript":"^5.3.0","@types/node":"^20.10.0","@a2akit/core":"workspace:*","@types/express":"^4.17.21","@types/supertest":"^6.0.2","@vitest/coverage-v8":"^1.0.0"},"peerDependencies":{"express":"^4.18.0 || ^5.0.0","@a2akit/core":"^0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/express_0.1.0_1768232545820_0.1972152926382691","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@a2akit/express","version":"0.2.0","description":"Express.js adapter for @a2akit/core A2A protocol servers","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"sideEffects":false,"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage"},"repository":{"type":"git","url":"git+https://github.com/a2akit/a2akit.git","directory":"packages/express"},"bugs":{"url":"https://github.com/a2akit/a2akit/issues"},"homepage":"https://github.com/a2akit/a2akit/tree/main/packages/express#readme","keywords":["a2a","express","agent","ai","middleware","protocol","json-rpc"],"author":"","license":"MIT","peerDependencies":{"@a2akit/core":"^0.2.0","express":"^4.18.0 || ^5.0.0"},"devDependencies":{"@a2akit/core":"workspace:*","@types/express":"^4.17.21","@types/node":"^20.10.0","@types/supertest":"^6.0.2","express":"^4.21.0","supertest":"^7.0.0","tsup":"^8.0.0","typescript":"^5.3.0","vitest":"^1.0.0","@vitest/coverage-v8":"^1.0.0"},"engines":{"node":">=18.0.0"},"_id":"@a2akit/express@0.2.0","gitHead":"32d26bcd61c687b9836790fd5f413c781c5a25d5","_nodeVersion":"22.11.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-u3f5PRjL2aIZ82Br2Aeejif+p0iliATimIAZm+sSEpFPzx59hizMKGdFrmTxMag/o5z0ESC3Bx5NbTgorQyGqA==","shasum":"27973b536342b27d5d7dc9e429acf652e2a505ba","tarball":"https://registry.npmjs.org/@a2akit/express/-/express-0.2.0.tgz","fileCount":8,"unpackedSize":24493,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCD3Q4SxKFHCVJ8NLeAFMBzOJFyzPhXkVI+2Hyz44u0wQIhAPsNOkbudIm1PXmkChqI3a3+GEuLDoUWYq6XawsU1hkn"}]},"_npmUser":{"name":"mcpkit-dev","email":"chechavalera@gmail.com"},"directories":{},"maintainers":[{"name":"mcpkit-dev","email":"chechavalera@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/express_0.2.0_1768292380321_0.32404955921258294"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-12T15:42:25.742Z","modified":"2026-01-13T08:19:40.664Z","0.1.0":"2026-01-12T15:42:25.965Z","0.2.0":"2026-01-13T08:19:40.462Z"},"bugs":{"url":"https://github.com/a2akit/a2akit/issues"},"license":"MIT","homepage":"https://github.com/a2akit/a2akit/tree/main/packages/express#readme","keywords":["a2a","express","agent","ai","middleware","protocol","json-rpc"],"repository":{"type":"git","url":"git+https://github.com/a2akit/a2akit.git","directory":"packages/express"},"description":"Express.js adapter for @a2akit/core A2A protocol servers","maintainers":[{"name":"mcpkit-dev","email":"chechavalera@gmail.com"}],"readme":"# @a2akit/express\n\nExpress.js adapter for [@a2akit/core](https://www.npmjs.com/package/@a2akit/core) A2A protocol servers.\n\n## Installation\n\n```bash\nnpm install @a2akit/express @a2akit/core express reflect-metadata\n```\n\n## Quick Start\n\n```typescript\nimport 'reflect-metadata';\nimport express from 'express';\nimport { createA2ARouter } from '@a2akit/express';\nimport { A2AAgent, Skill, TextPart } from '@a2akit/core';\n\n@A2AAgent({\n  name: 'Express Agent',\n  description: 'An agent running on Express',\n  version: '1.0.0',\n})\nclass MyAgent {\n  @Skill({\n    name: 'Hello',\n    description: 'Say hello',\n  })\n  hello(@TextPart() name: string): string {\n    return `Hello, ${name}!`;\n  }\n}\n\nconst app = express();\napp.use(express.json());\napp.use('/a2a', createA2ARouter(MyAgent));\n\napp.listen(3000, () => {\n  console.log('A2A server running at http://localhost:3000');\n});\n```\n\n## API Reference\n\n### createA2ARouter(agentClass, options?)\n\nCreates an Express Router with A2A protocol endpoints.\n\n```typescript\nimport { createA2ARouter } from '@a2akit/express';\n\nconst router = createA2ARouter(MyAgent, {\n  basePath: '/api/v1/a2a',  // Optional: used in Agent Card URL\n});\n\napp.use('/api/v1/a2a', router);\n```\n\n#### Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `basePath` | `string` | `''` | Base path for Agent Card URL |\n\n#### Endpoints\n\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | `/.well-known/agent.json` | Agent Card |\n| POST | `/` | JSON-RPC endpoint |\n\n### createA2AMiddleware\n\nAlias for `createA2ARouter` for semantic clarity.\n\n```typescript\nimport { createA2AMiddleware } from '@a2akit/express';\n\napp.use('/a2a', createA2AMiddleware(MyAgent));\n```\n\n### a2aErrorHandler\n\nExpress error handler for A2A errors.\n\n```typescript\nimport { a2aErrorHandler } from '@a2akit/express';\n\napp.use('/a2a', createA2ARouter(MyAgent));\napp.use(a2aErrorHandler);\n```\n\n## Examples\n\n### Basic Setup\n\n```typescript\nimport 'reflect-metadata';\nimport express from 'express';\nimport { createA2ARouter } from '@a2akit/express';\nimport { A2AAgent, Skill, TextPart } from '@a2akit/core';\n\n@A2AAgent({\n  name: 'Greeting Agent',\n  description: 'Greets users',\n  version: '1.0.0',\n})\nclass GreetingAgent {\n  @Skill({ name: 'Greet', description: 'Greet by name' })\n  greet(@TextPart() name: string): string {\n    return `Hello, ${name}!`;\n  }\n}\n\nconst app = express();\napp.use(express.json());\napp.use(createA2ARouter(GreetingAgent));\napp.listen(3000);\n```\n\n### With Existing Express App\n\n```typescript\nimport express from 'express';\nimport { createA2ARouter } from '@a2akit/express';\n\nconst app = express();\napp.use(express.json());\n\n// Your existing routes\napp.get('/health', (req, res) => res.send('OK'));\n\n// Mount A2A agent on a specific path\napp.use('/agents/greeting', createA2ARouter(GreetingAgent));\napp.use('/agents/calculator', createA2ARouter(CalculatorAgent));\n\napp.listen(3000);\n```\n\n### With CORS and Other Middleware\n\n```typescript\nimport express from 'express';\nimport cors from 'cors';\nimport { createA2ARouter, a2aErrorHandler } from '@a2akit/express';\n\nconst app = express();\n\napp.use(cors());\napp.use(express.json());\napp.use('/a2a', createA2ARouter(MyAgent));\napp.use(a2aErrorHandler);\n\napp.listen(3000);\n```\n\n## Testing Your Agent\n\n```bash\n# Get Agent Card\ncurl http://localhost:3000/a2a/.well-known/agent.json | jq\n\n# Call a skill\ncurl -X POST http://localhost:3000/a2a \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"jsonrpc\": \"2.0\",\n    \"id\": \"1\",\n    \"method\": \"tasks/send\",\n    \"params\": {\n      \"id\": \"task-1\",\n      \"message\": {\n        \"role\": \"user\",\n        \"parts\": [{\"type\": \"text\", \"text\": \"World\"}]\n      },\n      \"metadata\": {\"skillId\": \"hello\"}\n    }\n  }'\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}