{"_id":"@imenam/mcp-messenger","_rev":"28-f41bbc24c0a1b62aefa20cb5701dabb7","name":"@imenam/mcp-messenger","dist-tags":{"latest":"1.0.30"},"versions":{"1.0.1":{"name":"@imenam/mcp-messenger","version":"1.0.1","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.1","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"9d692003c1ef396e2d17ffe3f3baf4fb01a5505e","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.1.tgz","fileCount":33,"integrity":"sha512-y4TaZv25QL2MnDiiM0fSlLq3mUndAOKfLrTB9LdkDTod5zLdA7MCcvg/86MFWUbmzM9P9Wr+BewzoMTajT/RKg==","signatures":[{"sig":"MEYCIQDntuDrTvh2P/CNpfbKmBXTKupm7ylLZJ3bzP6qlPpnGwIhAPGFcU//PuXdSPWMdKc7/wUKFbsVeBc9rT7js0cC8UG5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137412},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"070416f4f535341786d8b980bab383c34b3e752d","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.1_1788530236746_0.9343779571035324","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@imenam/mcp-messenger","version":"1.0.2","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.2","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"f6e07b690b5413cb0471d331dbacd5b5fea3837b","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.2.tgz","fileCount":35,"integrity":"sha512-9Hvj00NRKcGT4qtHqW3E583PwhJVExA5tIFhdpjy609rYyWTN4/aOaImdfEfL/Fq7oCGIqT3fpiCFTyc1Qj80A==","signatures":[{"sig":"MEYCIQDHQzyEMGBANrlHSwFmilHQ1C2hDe05Xq/tWbLHY3qUfwIhAP687qlL8zCXmNtC6rQSPP7VHbEjHnmOVCkmQNIrQZRD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139561},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"a06a8f8881f1cec11f98641f7c1dfa31a86d56e3","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.2_1788714579785_0.8054096234727521","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@imenam/mcp-messenger","version":"1.0.3","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.3","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"11d7551a59d063ee94c25b3ba9d6455c914000d5","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.3.tgz","fileCount":39,"integrity":"sha512-TdZZeqLS5kvSc9TMokTunjD3kTjZW+2zmkUKpr9jd3HcvZxlP/c8NqRcB8F62fm8x7tyq8lBylTQ5G3fYbtA9w==","signatures":[{"sig":"MEUCIQC6yjC24K9iaopyYgHIcjVqE5lOHDjxAlZLFe7/JXU5DgIgfAho+9hO91BXFpBzYOnOM0DLeGBq9AEDifI/n5y8BDQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159626},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"225fb39daffc39677a26013110a9be143a6c74da","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.3_1788788609652_0.12513492483896593","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@imenam/mcp-messenger","version":"1.0.4","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.4","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"d7247ae40bf317bb0fdc2a10bb5222e6a403dfb3","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.4.tgz","fileCount":41,"integrity":"sha512-3R50usHo6hFw0wUAQeB6fgMgQfn0IoqQmKufNj1Ina7czZgNAMCbwTRt8YiNXsuxhd2ZdbF5gCm1K0bphT03/g==","signatures":[{"sig":"MEUCIGpacV+obN/mVwc6OGSCSBMTuN/pNtHvEWmxbnu1PsNHAiEA6zJsAal7mZn/4TJNFhXkKuPtaSm1wx3d76NBnRf3s04=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167313},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"0dc02dcd321f0677770bb85834b0193f1524cb16","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.4_1788792768856_0.39968671026302394","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@imenam/mcp-messenger","version":"1.0.5","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.5","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"d62ec37e29fedc35112a0ae11aa43b4c9361e545","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.5.tgz","fileCount":41,"integrity":"sha512-Id5qquHxYkH8XEm7ivxcdu36/CAb0c+5vSbthUCz1KbL5cHeoOEq/FfX3mTmwMoUhWTXDTm8ofUXI7T9DEKgIw==","signatures":[{"sig":"MEYCIQDhosv3shlnqhABVk3yT2fimPMVtfFhsDlBMqgJQQJWAgIhANSZWenrYdzVimlaL82bQPOvmghCcST7aWg8ObrWU/yB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":190884},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"0d954c72173de7de2b1e84bb973d7db59624294a","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.5_1788849191134_0.11955268775165595","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@imenam/mcp-messenger","version":"1.0.6","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.6","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"9af050fbacf96b4c2ec4e0c2becabb3055f83ad6","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.6.tgz","fileCount":43,"integrity":"sha512-z3i9+TTBiCKkh66KaYY2CR+fHaw7I0wpXZUIsfzxmM6jB/2xXgLHezfjsYb1+vamUG5HDh1qcEotTdQHCvJG3A==","signatures":[{"sig":"MEUCIEYFtPNCyttky+UA5WWj9n6ZrEW1qaNUeOXCE470lX5MAiEAuZ/WbIOB0dNL+l0BSZvHESiEQbdGG56js1bhoBOIT64=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":197183},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"7a98ffc3f4006580b70f0be0903d8a3086fd2cf6","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.6_1788853040083_0.5379983169334286","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@imenam/mcp-messenger","version":"1.0.7","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.7","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"31c7ce5b2a2f087f17154d9e6830d131a1515c29","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.7.tgz","fileCount":43,"integrity":"sha512-0w8l5ZDhAM59C4S3ZVWpVon3ChSf7LJ5yimd3VxC6s1q/nPYiFK8/dVooDIRm2ZkFEaj+eKQiSLfEQbOfV0RCA==","signatures":[{"sig":"MEUCIQDyOuWyoNSbapFt3GtO7pQ/Xk7a1gvYcfLJo+y/g/AGTQIgTL9HNqkxGB10Sj5G7FV+jgmZz6gyhnLpIgZYg6AbJH8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205487},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"9b03df207bf876341823c36286ea91e6ccc3967f","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.7_1788855595101_0.23459745179643887","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@imenam/mcp-messenger","version":"1.0.8","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.8","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"1c34e9710881a4d387f3788eb00251f8bfea6a28","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.8.tgz","fileCount":43,"integrity":"sha512-a6UZNHu88owSwdz8vCelbOFIcd0dt5PqYNHTPhc0B/nwJd7/n//RLJGZqYHLXJOI4BBsWno8z0oJTZnWunUqFg==","signatures":[{"sig":"MEUCIBUwXN7aOmfjL8W594RVurtkJPJy8QQIdRZaYKrMHP4FAiEA+BMqHAN1o8XfdnzEamJ3OEf+8A019YdnZZKQGh5EEhg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":209748},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"6b6918d3c8e5df8cb440e67806c5cac512cec473","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.8_1788856556642_0.5202887475053841","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@imenam/mcp-messenger","version":"1.0.9","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.9","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"0f5970f800ded0fdf59f8ab74164de550c9343c4","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.9.tgz","fileCount":43,"integrity":"sha512-gu7PZNzWvn/INBXxnqm9rT4R4ui0Jy6oQLJZBL7RaXimO1G/a02pd/NzMco4cMPNd+i9X6b3iV+FNdrnEwX8hw==","signatures":[{"sig":"MEYCIQDMXBEB6b18hp88P3nXmfjg3dN2UQPmZ2aF6RMQdeOxbQIhAJgmB55ds7A2sMHlXb5Ss1lVMq7mpYJcgyxb6n/2toUb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":210738},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"f834676ad134b510c7ffd4fdbe6f117ac78db339","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.9_1788857264427_0.05183787458970146","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@imenam/mcp-messenger","version":"1.0.10","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.10","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"ea015ddb410613258e20a295378000faac0072d6","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.10.tgz","fileCount":43,"integrity":"sha512-y6bZkqFIQshYMfjP7TcwxPA7dnX6u7dwMz7taUa2jCF3+/7upOae8YFj8BJ6FA0ydRPO+xqYgHD1lkmWmq7leg==","signatures":[{"sig":"MEYCIQDAUHTzxu4DriZ8eDXUEdrvpNqwDNPwlMDJkHGehiA3tgIhAJCAaU2M4wccXsxW/04j+S6evNyGtwaIrusP18VRsVup","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":222269},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"ece03114f0eda014ca3452d94c7a4c358bb5ebf1","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.10_1788858539295_0.03264792894574442","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@imenam/mcp-messenger","version":"1.0.11","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.11","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"8d4486be400f7db4684b81aea55356f287d42d92","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.11.tgz","fileCount":43,"integrity":"sha512-kE+Liz9MkRbFvOd2zacdO/QkEI+8wzMoKMCneN/x66RtU+PCuj2ntWsoiFRXVv6KfTFfItJIuEqmwXLKy7SFVA==","signatures":[{"sig":"MEYCIQDniXeUEgIpfm4CLuDR3m1EQaaUyitWxYvh6kxINzUSowIhAPQkMwaZEFNEcWKl3pISNrRu25GD02pPV8D/G4Rl/EyL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":259529},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"1f77617fa23d5179afe52642bf3ac37417c9157d","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.11_1788862059178_0.8232134066353367","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"@imenam/mcp-messenger","version":"1.0.13","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.13","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"bd718bfab9e49d91436bcb0c5e59ace3275ebc84","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.13.tgz","fileCount":43,"integrity":"sha512-7KdO3XFqy9XzhTg5LCr6qM7GxxL1onAe5KiuAPkaRSHVTJ8ueU1Mnh+sQoH79DBBPKmOiplNUrIvQEHp5kbHiw==","signatures":[{"sig":"MEUCIHmKujY1kOvJZ6sc5nmYlxS9VxWG0K8MuCuwbVbAdo7WAiEAlAanYuDH7G6s1bbBYoJiRl0r+6+XbjengX0paL8zG/A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":269430},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"5e438e135df56013027c692fb2cec56c745453c4","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.13_1788862812649_0.92440454036476","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"@imenam/mcp-messenger","version":"1.0.14","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.14","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"fa10c7f117f78c26a56be2a95f3abb8cd958caf2","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.14.tgz","fileCount":43,"integrity":"sha512-y3d2COPgrnAdG3GiRTyliwTgld5AM9E7Um8DQ21GfVptZe0IZYe+mkqAnrLCUoLoe8sRL7In9IzFwIy+Qjh2wA==","signatures":[{"sig":"MEYCIQCCY4uwqzP0YX88KMIZaxQmp4JGDSwYsXmJlhBEZ28tkgIhAPcy9ahyr2IaOL4aBRMkgavoZjvfNg4LjNFMIyEAoRQM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":271550},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"84698a7a09e38d1c2b6fff063e50d307e2f8782b","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.14_1788863753955_0.08587315946649299","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"@imenam/mcp-messenger","version":"1.0.15","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.15","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"74d94fe7949a9c858a070874e62771be7e22c585","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.15.tgz","fileCount":43,"integrity":"sha512-sQsHBP14od91Vy7P54mDyHXaeGXRw7S/D179lUkAytK4PleKccqbeUFHupJ3RGy5GoVusPjYhRPruhu3afMZ+A==","signatures":[{"sig":"MEQCIBPhNo/ZDxHwkR2rnWV/xJL5ByphJa8DUbUsOjc0Bot+AiAKjdNS0FeUniS8bVM2r+u5uYP4fv12dtPeS5cQ++kf/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":275262},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"3431f834398479a8dd42317e9837c37a0394198d","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.15_1788864253418_0.6665833991947567","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"@imenam/mcp-messenger","version":"1.0.16","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.16","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"e742e59a02d06b3abdf6da76d7ee8c4de2375c80","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.16.tgz","fileCount":44,"integrity":"sha512-qEiuUML/4UIu8O3MtBXlPFutctRD+mVXxi3weAipYeW9jqUW+VVAGNnOHAoQrP5X1YcTy0zD+G9BYkPLD1QzQw==","signatures":[{"sig":"MEUCIEaemr7F0IWbvqYAWO/B5Fnv6EuqAmf4nZBF9Eggx9rzAiEA/9DQ8IP+OtjaFXy3ByVW72hU0O6jFsfC53K1nbCulIE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292548},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"06056e7347b693014bd7126dcd429cabd0ef4526","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.16_1789025523362_0.7824363555595371","host":"s3://npm-registry-packages-npm-production"}},"1.0.17":{"name":"@imenam/mcp-messenger","version":"1.0.17","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.17","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"a275807163b0f7b3e6050f9b0a5e8e7b90b426d5","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.17.tgz","fileCount":48,"integrity":"sha512-+/ogVjdPAusAefXn42P06FQ59QVwJbeE1swA+CeNbnNHAJv0PGfI4eJNDrwwhEsXHDzhIUOLEQSPLnJTCRRWjQ==","signatures":[{"sig":"MEYCIQCT+G38wtd81fMDjI1Z/iwfMcnY2XIQSqTmjc9qGj2NvQIhAK0lCmFyWWKdw5VCi2cwMowmX1MUo2grnhc0zKRnKKtM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":323676},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"74604c1d83ec4c2e56c1b74d97127eaee4a48359","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.17_1789037471413_0.39271469190061703","host":"s3://npm-registry-packages-npm-production"}},"1.0.18":{"name":"@imenam/mcp-messenger","version":"1.0.18","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.18","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"96c476bd2ff0e2c3d481a908db57363d164c22c9","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.18.tgz","fileCount":48,"integrity":"sha512-5RM7N4E9QfbNSuJ9A4/GHq1feYbvE+k9LrgXy3Ua2J1wO3VUGlNI9oGs0xTdJfSzsERdTdufp++FbcKTDHlXMA==","signatures":[{"sig":"MEQCICSwP7rEiVxpk1di8OSRnbYnon+riq6jGX580KAPeRsOAiAeNrZAJzbfoqKcHm3c8hpUDZbtgV9K/jxmVgeBR4Bc1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":345380},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"bb726aabc485af742f291cccb7229867a247caee","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.18_1789042740701_0.834892772804408","host":"s3://npm-registry-packages-npm-production"}},"1.0.19":{"name":"@imenam/mcp-messenger","version":"1.0.19","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.19","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"89f9bc57ea647802d30352c6c089af7a8d01c910","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.19.tgz","fileCount":48,"integrity":"sha512-DSft/q1OMA48GqYNUsd4MHuGNe5zaBaClAxHi6UlxOwqN4N+xk6b15QMmUCVMkm+UIP5u2zNn72hS7sOdW9lrA==","signatures":[{"sig":"MEYCIQCdCdh0IEFF51HM43+7FjERZyDYDjFaGmpcPFAvhjXaNQIhAPkrDpVb4QDRma3eMzKl1XYts8jfdARuiPDPjwlAmiqR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":361009},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"fe1a754daa14ca2aa14a3a2e4195658896431d15","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.19_1789044041584_0.08474276130371172","host":"s3://npm-registry-packages-npm-production"}},"1.0.20":{"name":"@imenam/mcp-messenger","version":"1.0.20","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.20","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"7416f7de4420a7094cfd8df2b81ec26514b510ef","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.20.tgz","fileCount":48,"integrity":"sha512-iT9HIUaksWqOoBOjuBA2jCu2xH1pJF4Gkcmfjj3xQshxGQIv9VGDIoVzlS6JkN40LWzUZmAct8rws5oIYVdu+Q==","signatures":[{"sig":"MEUCIDxownmmqG5YSOZLs2pO57QcOgl7Ihm3ewizO8A/WG1AAiEAvSUQe2yFGSrmpHNQ14sob9XXVRUGv322N+M6/1FQdxk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":368911},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"c48f4aff8f4fedee15eb2e86081ece2f7373bfd8","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.20_1789046564266_0.5085025671615087","host":"s3://npm-registry-packages-npm-production"}},"1.0.22":{"name":"@imenam/mcp-messenger","version":"1.0.22","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.22","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"94c5527c0aaee7955223b1265f1fd164aca09c4f","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.22.tgz","fileCount":48,"integrity":"sha512-e0jCmR4Z+kkMh6nQpsf7BMAJGNvaS5oQh36OI4vH1C4FGjpTrgAwcx1sbTYwLz2oy+smsOUaDCFLZqnwmDqlxA==","signatures":[{"sig":"MEUCIQDbCSDG1EP1/eG308YhR8FxuRAbu0b5jUPb/oyEtayJ7AIgX85MarL2MgaV7S+zMGsukG+6rEuKSjbvFAmkRU1guyo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":373207},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"fbb33723d0df94380fe1f3ea85271e8f4c628fb3","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.22_1789047902123_0.9904677256615826","host":"s3://npm-registry-packages-npm-production"}},"1.0.23":{"name":"@imenam/mcp-messenger","version":"1.0.23","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.23","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"3d9eb53193ccd88a6ab2bbed3436d05e5f77482b","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.23.tgz","fileCount":48,"integrity":"sha512-SDUSR/d/WgT4Tun9zHwsxDl+8DZ2m9Eh1y+UFPjBnusQg43/EioZ81KZIIjTqRN3rwAf9jQ0v53N7+HkKZfO2w==","signatures":[{"sig":"MEUCIHgQaiXZE5UvXu0+mRzOe+E5qNv4wnK1NyC16ikD1wxZAiEAhWtBKvtOqHljINAp2e8Zd29IkBw/VFZYcYb7xICapQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":373401},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"b3adb705ff2a1f13688bbef401116bbb8767e2bf","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.23_1789048570167_0.5334600262826616","host":"s3://npm-registry-packages-npm-production"}},"1.0.24":{"name":"@imenam/mcp-messenger","version":"1.0.24","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.24","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"2f31f8b0945fe1ce1ed92e7ca421153e09e9d7f2","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.24.tgz","fileCount":48,"integrity":"sha512-GIvsJGJFP6McbMnMi7mHubGKuu9lJPbuGKouxc/DNTL8SFx5Etc234rfR0u9K6THP5AeZ3Vsu50tApCKuW5IYg==","signatures":[{"sig":"MEQCIHBEqeHqDnOYTsD60bZ87F6NaeN/b+nMvYT+r9bRmzrEAiA90Zm2no/vI3EIbq8COz0UR1OkGdNle7ZHpU/SmTCxdQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":379803},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"3e1741eec32f512a225d89e18b04a552552037c9","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.24_1789054477430_0.7593342295232779","host":"s3://npm-registry-packages-npm-production"}},"1.0.25":{"name":"@imenam/mcp-messenger","version":"1.0.25","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.25","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"7ef0d903b130c611f0588958d000d66db0da8272","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.25.tgz","fileCount":48,"integrity":"sha512-rBNf6nX5fofVvjplVLGzdUa0iCrg1x6O45igs3OppEDSpQ+UTEU4eeh36NusJL7+x7Kx2h3Pg6712owfnEdytA==","signatures":[{"sig":"MEUCIBjJh/tHRr7BR6ZAj2l+0suv2Q7vRtd93Ba61w3YjfVLAiEAqFzYWM0zZgdCQmLzQvjWmxplBHkQALL4Q2xPYUFZwMg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":379728},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"9238c4af52c985056427f4ee2df12d5c0b666072","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.25_1789055617537_0.09326823801715056","host":"s3://npm-registry-packages-npm-production"}},"1.0.26":{"name":"@imenam/mcp-messenger","version":"1.0.26","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.26","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"9dba3c2f48c6cff9967b110973791551652f5ed6","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.26.tgz","fileCount":48,"integrity":"sha512-LOWJjswgy9TtFogHrTheE+TgLUmaMY9fdv/yC0mTFqrmNMq9HxZJ1Wq7djdJP00yeNxz5bScgboOakud8gkd5Q==","signatures":[{"sig":"MEQCIC7NHy3R4gRD6M1Ux4CsIQMeuiqPqG8tms/thq0Yp1zBAiB4vGEPti9UU4Uaa7LeN+uiKRg9Rs4lSlZOignLArt9LQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":380262},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"ac2abd13f1a9ba84e21617bf6f6c3674efd0d79d","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.26_1789055896559_0.22221106189575157","host":"s3://npm-registry-packages-npm-production"}},"1.0.27":{"name":"@imenam/mcp-messenger","version":"1.0.27","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.27","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"f01d973b9bf7da0dd867d1842456d3e2f9f210b8","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.27.tgz","fileCount":48,"integrity":"sha512-tC6cVqSAWcMotxPDSKR9Mpznl6i3Vf4EaGXUXwKGUZs2E6eSOtco9yyb/Pe9f/hQTwHlo/BfJ68ZwdIwn8A0bQ==","signatures":[{"sig":"MEQCIHyVOmSi7AWumxyaEfEHoqbCbuB+bC0FvQEVrPnR6Kg/AiBicMim329C3rEh+Xx8/gXZXHyfd04Um7mbtgovJNKbKw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":381249},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"fc0d97f5bfb04a2f59c5970438928830bc7f2b81","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"10.9.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.27_1789113338436_0.14004058843303935","host":"s3://npm-registry-packages-npm-production"}},"1.0.28":{"name":"@imenam/mcp-messenger","version":"1.0.28","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.28","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"138370fdf504c7720effff9f465954d8e41b5f20","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.28.tgz","fileCount":48,"integrity":"sha512-5zDLncsaKTmPNuWTnWCzAi1a+Y4Z4dBmZd5j3qNe/84MDp9JW5SCRzxD6SuqUJ6iu+r1lkHdGSKQXbRFxHFYDA==","signatures":[{"sig":"MEUCIGmDB77secIbSjjGjaxn8uI1ajps7HTO8x6EDmU3DkbFAiEAhFUrHjlXVY77KrBIbf6Uo/vYseSX8GMVjBtmHYqIi3c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAwMACWhGO2yaTTQVZnQH3VlbNfy+uUHcY21tSHnXr2NAiEAmuRbMme9Gl52zJQximygaUsCZzesuANRaPmM5bL2rvg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":392420},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"42b9cd54fb387b2e540ddb1045d45ac08818b953","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"12.0.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.28_1789738394783_0.17836920588803395","host":"s3://npm-registry-packages-npm-production"}},"1.0.29":{"name":"@imenam/mcp-messenger","version":"1.0.29","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","_id":"@imenam/mcp-messenger@1.0.29","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"927eea759ece00f76ae9ec78529b64f056d6724b","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.29.tgz","fileCount":48,"integrity":"sha512-AV2d7cWCdk+AbeaHv4p/TXwJvPFGmdVI6gsryZPrZCpXrXgFNijaMImT2EnwNppdEEv3wi5vTFm/NPhICnLgQQ==","signatures":[{"sig":"MEUCIQDJ0x6men71Wml49fuDAIeZNGLIMcP1hsbhY2mBZl4gUAIgCPH34f7iEWvaKwaOkgbSFINRyyaxaH+gK8EVEkHh9J8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCzmODy6k/FV7tOh9/qgQ0nS7TDv8AblS00hCwOHjKlbQIgIlFHOuh++Hy1Y+fX2rgjEltQ2N50ITidB3iXs1XTQgw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":394195},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"159f0d4df46ca1e66a68ec2fe563804bc7de0442","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"_npmVersion":"12.0.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/mcp-messenger_1.0.29_1790540755417_0.8739982448705435","host":"s3://npm-registry-packages-npm-production"}},"1.0.30":{"_id":"@imenam/mcp-messenger@1.0.30","bin":{"mcp-messenger":"dist/src/index.js"},"dist":{"shasum":"bf0a8e3eae457f47fd0640da5d9c412a7e7837bd","tarball":"https://registry.npmjs.org/@imenam/mcp-messenger/-/mcp-messenger-1.0.30.tgz","fileCount":50,"integrity":"sha512-CdCT611IqfrDhkJwrSkywRU5nX7wGsqXRuoQ18GIXdK8P24Kc4NPA84OfVBYkGX9m3PeJa4fkMhzKCuoVUrvqQ==","signatures":[{"sig":"MEUCIQCvL/CvSQFGQGqEuXuxZfgBgJA3WrBIv0RGpoYEhvg+WgIgAn74oxxZCeLSfVaKxIE5je56dMvF8H5i9R6rHnawLmA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIA1tt+EanRLGdPZlh+2otFLJQkeVsSAS3rGka5QH06DpAiAfjLxypXnjjvI+iBJl8SNsfmAzIeRuhsHNJVCJChqQWA=="}],"unpackedSize":416514},"main":"dist/src/index.js","name":"@imenam/mcp-messenger","type":"module","types":"./dist/src/index.d.ts","author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"engines":{"node":">=20"},"gitHead":"3a6cc8e7bd0de5a186cf2355fdec1d66b58ff861","license":"ISC","scripts":{"test":"npm run build && vitest run","build":"node scripts/generate-version.js && tsc && node scripts/copy-assets.js","serve":"node dist/src/index.js --server","start":"node dist/src/index.js","release":"npm version patch && npm publish && git push --follow-tags","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","generate-token":"node dist/src/index.js --generate-token","prepublishOnly":"npm run build"},"version":"1.0.30","_npmUser":{"name":"imenam","email":"matthieupin@gmail.com"},"keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"_npmVersion":"12.0.2","description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","directories":{},"maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.5.4","dotenv":"^17.4.2","helmet":"^8.3.0","express":"^5.2.1","better-sqlite3":"^12.11.1","express-rate-limit":"^8.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","vitest":"^3.2.7","typescript":"^5.9.3","@types/node":"^22.20.1","@types/express":"^5.0.6","@vitest/coverage-v8":"^3.2.7","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-messenger_1.0.30_1790663269398_0.4519207855966181"}}},"time":{"created":"2026-09-04T13:57:16.602Z","modified":"2026-09-29T06:27:49.703Z","1.0.1":"2026-09-04T13:57:16.885Z","1.0.2":"2026-09-06T17:09:39.944Z","1.0.3":"2026-09-07T13:43:29.787Z","1.0.4":"2026-09-07T14:52:49.003Z","1.0.5":"2026-09-08T06:33:11.260Z","1.0.6":"2026-09-08T07:37:20.226Z","1.0.7":"2026-09-08T08:19:55.232Z","1.0.8":"2026-09-08T08:35:56.792Z","1.0.9":"2026-09-08T08:47:44.575Z","1.0.10":"2026-09-08T09:08:59.438Z","1.0.11":"2026-09-08T10:07:39.334Z","1.0.13":"2026-09-08T10:20:12.810Z","1.0.14":"2026-09-08T10:35:54.105Z","1.0.15":"2026-09-08T10:44:13.552Z","1.0.16":"2026-09-10T07:32:03.521Z","1.0.17":"2026-09-10T10:51:11.551Z","1.0.18":"2026-09-10T12:19:00.845Z","1.0.19":"2026-09-10T12:40:41.749Z","1.0.20":"2026-09-10T13:22:44.433Z","1.0.22":"2026-09-10T13:45:02.262Z","1.0.23":"2026-09-10T13:56:10.290Z","1.0.24":"2026-09-10T15:34:37.580Z","1.0.25":"2026-09-10T15:53:37.673Z","1.0.26":"2026-09-10T15:58:16.718Z","1.0.27":"2026-09-11T07:55:38.592Z","1.0.28":"2026-09-18T13:33:14.893Z","1.0.29":"2026-09-27T20:25:55.500Z","1.0.30":"2026-09-29T06:27:49.493Z"},"author":{"name":"Matthieu Pesnot-Pin","email":"matthieupin@gmail.com"},"license":"ISC","keywords":["mcp","model-context-protocol","agent","messaging","mailbox","agent-to-agent"],"description":"Cross-platform agent-to-agent messaging: an MCP mailbox client plus its HTTP mailbox server.","maintainers":[{"name":"imenam","email":"matthieupin@gmail.com"}],"readme":"# MCP Messenger\n\nBoîte aux lettres pour agents IA : un **serveur** central reçoit et conserve les messages,\net un **client MCP** donne à chaque agent — quelle que soit sa plateforme — les outils pour\nécrire, lire, classer et attendre des réponses.\n\nLe même paquet joue les deux rôles :\n\n| | Mode serveur (`--server`) | Mode MCP (sans argument) |\n|---|---|---|\n| Rôle | Boîte aux lettres : stockage, distribution, annuaire | Client stdio branché sur un agent |\n| Exposé sur | HTTP/HTTPS (API + console web) | stdin/stdout (JSON-RPC MCP) |\n| Consommé par | Les MCP des agents, la console web | Claude Code, Cursor, tout client MCP |\n| Variables clés | `MESSENGER_PORT`, `MESSENGER_TOKEN` | `MESSENGER_AGENT_ID`, `MESSENGER_SERVER_URL`, `MESSENGER_TOKEN` |\n| Processus | 1 pour toute la flotte | 1 par agent |\n\n```mermaid\nflowchart LR\n    A[\"Agent A (Claude Code)\"] -- \"stdio\" --> MA[\"mcp-messenger (MCP)\"]\n    B[\"Agent B (Cursor)\"] -- \"stdio\" --> MB[\"mcp-messenger (MCP)\"]\n    C[\"Agent C (autre plateforme)\"] -- \"stdio\" --> MC[\"mcp-messenger (MCP)\"]\n    MA -- \"HTTP(S)\" --> S\n    MB -- \"HTTP(S)\" --> S\n    MC -- \"HTTP(S)\" --> S\n    S[\"mcp-messenger --server\\nSQLite + API + console\"] --> U[\"Console web /ui\"]\n```\n\nLes agents n'ont pas besoin d'être sur la même machine ni sur la même plateforme : ils\npartagent seulement l'adresse du serveur. **Chaque session d'agent reçoit sa propre boîte**,\nidentifiée par une adresse opaque du type `box_9f2c4a01b3d7e5f8` — voir\n[Adresses et sessions](#adresses-et-sessions).\n\n---\n\n## Démarrage rapide\n\n### 1. Lancer la boîte aux lettres\n\n```bash\n# Deux jetons distincts : celui des agents, et celui de la console.\nnpx @imenam/mcp-messenger --generate-token   # → jeton client\nnpx @imenam/mcp-messenger --generate-token   # → jeton console\n\nMESSENGER_TOKEN=<jeton-client> MESSENGER_ADMIN_TOKEN=<jeton-console> \\\n  npx @imenam/mcp-messenger --server\n# → listening on http://127.0.0.1:3600 (loopback only)\n# → auth: shared token — required on every request\n# → WARN shared token: no isolation between mailboxes — any holder can act as any address\n# → WARN set MESSENGER_AGENT_TOKENS (one token per agent) to compartmentalize\n# → web console: http://127.0.0.1:3600/ui/ (asks for MESSENGER_ADMIN_TOKEN once)\n```\n\nTrois invariants, non négociables et vérifiés par les tests :\n\n1. **Le serveur écoute toujours sur `127.0.0.1`.** `MESSENGER_HOST` n'est pas un réglage :\n   toute autre valeur fait échouer le démarrage. Pour joindre la boîte depuis une autre\n   machine, il faut placer un reverse proxy (TLS) devant.\n2. **Un jeton est obligatoire et vérifié sur chaque requête de données** — API, `/health`\n   et données de la console (`/admin`) comprises. Seule la page de la console, qui ne\n   contient aucun secret, est servie librement. Sans `MESSENGER_TOKEN` ni\n   `MESSENGER_AGENT_TOKENS`, le serveur refuse de démarrer.\n3. **Le jeton de la console n'est jamais celui des agents.** `MESSENGER_ADMIN_TOKEN` est\n   exigé dans tous les cas, et le démarrage échoue s'il vaut `MESSENGER_TOKEN`. La console\n   voit toutes les boîtes de tous les projets et sait les supprimer, alors que le jeton\n   client est recopié dans le `.mcp.json` de chaque projet : les confondre donnerait ce\n   pouvoir à tout porteur de ce fichier.\n\n> **Le mode jeton partagé ne cloisonne pas les boîtes.** `MESSENGER_TOKEN` atteste\n> l'appartenance à la flotte, pas une adresse : l'en-tête `X-Agent-Id` qui accompagne chaque\n> appel n'est alors adossé à rien, et tout porteur du jeton peut lire, envoyer et supprimer\n> au nom de n'importe quelle boîte. C'est un mode « cercle de confiance », adapté aux\n> sessions d'une même personne sur une même machine — le serveur le rappelle au démarrage.\n> Dès que les agents ne se font pas mutuellement confiance, passer à\n> [`MESSENGER_AGENT_TOKENS`](#serveur), qui lie chaque adresse à son propre\n> jeton et rejette toute autre combinaison.\n\n### 2. Déclarer le MCP côté agent\n\nDans le dossier du projet de l'agent :\n\n```bash\nnpx -y @imenam/mcp-messenger --claude-setup-mcp\n```\n\nLa commande écrit l'entrée `mcp-messenger` dans le `.mcp.json` du répertoire courant (les\nautres serveurs sont préservés ; `--force` pour remplacer une entrée existante), avec un\n`MESSENGER_AGENT_ID` pré-rempli d'après le nom du dossier. Il ne reste qu'à coller le jeton\ndu serveur dans `MESSENGER_TOKEN`.\n\nLe bloc généré, à écrire à la main si tu préfères :\n\n```json\n{\n  \"mcpServers\": {\n    \"messenger\": {\n      \"command\": \"npx\",\n      \"args\": [\"@imenam/mcp-messenger\"],\n      \"env\": {\n        \"MESSENGER_AGENT_ID\": \"planner\",\n        \"MESSENGER_SERVER_URL\": \"http://127.0.0.1:3600\",\n        \"MESSENGER_TOKEN\": \"le-jeton-du-serveur\",\n        \"MESSENGER_AGENT_NAME\": \"Planner\",\n        \"MESSENGER_AGENT_DESCRIPTION\": \"Découpe les tâches et répartit le travail\"\n      }\n    }\n  }\n}\n```\n\nChaque agent reçoit le même bloc avec **son propre** `MESSENGER_AGENT_ID`. Au démarrage, le\nMCP s'enregistre dans l'annuaire du serveur ; si le serveur est momentanément injoignable,\nla session MCP démarre quand même et l'enregistrement se fera au premier appel réussi.\n\n### 3. Écrire à un autre agent\n\nL'agent A appelle `send_message` avec `to: [\"coder\"]`, l'agent B voit le message via\n`list_messages` puis `read_message`, et répond avec `reply_to` pour rester dans le fil.\nLe fil se nomme au passage (`thread_name` sur `send_message`, ou `rename_thread` plus tard).\n`wait_for_message` permet d'attendre une réponse sans faire tourner une boucle d'appels : il ne\nrend la main que sur un message arrivé *après* le début de l'attente, les non-lus déjà en boîte\nne l'interrompent pas.\n\n---\n\n## Être notifié sans attendre\n\nAttendre coûte un tour d'agent. Pour rester joignable **sans rien bloquer**, l'agent active\nles notifications une fois en début de session ; ensuite il travaille normalement, et les\nmessages entrants l'interrompent d'eux-mêmes — y compris quand il est à l'arrêt, inactif.\n\n```\nenable_notifications()      → retourne immédiatement, ne bloque rien\n\n  Notifications enabled for mailbox `box_9f2c4a01b3d7e5f8`.\n\n  Last step — call the Monitor tool now, with exactly these arguments:\n    command:     npx -y @imenam/mcp-messenger --watch box_9f2c4a01b3d7e5f8\n    description: Incoming messenger messages\n    timeout_ms:  1800000\n```\n\nL'agent recopie ces trois arguments dans l'outil `Monitor` de son hôte. Le veilleur tourne en fond, tient une attente longue sur `/api/wait`, et écrit **une\nligne par message** sur sa sortie standard :\n\n```\n[messenger] planner — Refacto prêt (msg_4c1e88a0b2)\n```\n\nChaque ligne réveille l'agent, qui appelle `read_message` s'il décide de traiter le message.\n\n**Réarmer à l'expiration.** Claude Code arrête tout `Monitor` au bout de 30 minutes au plus,\nquelle que soit la durée demandée, et prévient l'agent. Ce minuteur appartient à l'hôte : le\nveilleur ne peut ni le prolonger ni le remettre à zéro. L'agent relance donc le même appel\n`Monitor` à chaque expiration, sans repasser par `enable_notifications` — la réponse de cet\noutil, les instructions du serveur et le bloc `CLAUDE.md` le lui disent. Le délai de grâce\ndécrit plus bas couvre l'intervalle : `whoami` reste à « armed » pendant le réarmement.\n\n**Pourquoi deux appels et pas un.** Armer un réveil, c'est ouvrir un canal vers la boucle de\nla session hôte. Un serveur MCP ne peut pas le faire seul : `Monitor` est un outil de l'hôte,\nseul le modèle peut l'appeler. `enable_notifications` fait donc tout le reste — il connaît\nl'adresse, il prépare le terrain — et rend la commande exacte à recopier. L'agent ne compose\nrien.\n\n**Où passe le jeton.** Le veilleur est lancé par l'hôte dans le shell de la session : il\nn'hérite pas du bloc `env` du `.mcp.json`, donc ni de `MESSENGER_SERVER_URL` ni de\n`MESSENGER_TOKEN`. Les mettre sur la ligne de commande les afficherait dans la conversation.\n`enable_notifications` dépose donc un relais en `0600` sous `~/.mcp-messenger/watch/`\n(`MESSENGER_STATE_DIR` pour le déplacer), que `--watch` retrouve à partir de la seule adresse.\nLe fichier est nommé par hachage de l'adresse, supprimé à la fin de la session, et purgé au\nbout de sept jours si la session s'est arrêtée brutalement.\n\n**Savoir si c'est vraiment armé.** L'armement dépend de l'agent : rien ne peut le déclencher\nà sa place, et un agent qui saute l'étape se croirait joignable sans l'être. Le serveur suit\ndonc les attentes tenues par un veilleur, et `whoami` le dit :\n\n```\nNotifications: armed — incoming messages will interrupt you (watcher since 2026-09-07T13:31:00.203Z).\nNotifications: NOT armed — no incoming message will reach you. Call enable_notifications.\n```\n\nC'est une présence de connexion, pas une donnée stockée : elle vit en mémoire du serveur et\ndisparaît avec lui. Un `wait_for_message` ordinaire ne compte pas — il s'arrête au premier\nmessage, un veilleur reste. Entre deux attentes longues, un délai de grâce de deux minutes\névite que le signalement clignote. `enable_notifications` s'en sert aussi : si un veilleur est\ndéjà en place, il le dit et n'en fait pas armer un second, qui doublerait chaque notification.\n\n**Ce que ça ne couvre pas.** Le veilleur n'annonce que les messages arrivés **après** son\ndémarrage : `enable_notifications` signale le nombre de non-lus déjà en boîte, à traiter avec\n`list_messages`. Et `--claude-setup-mcp` écrit un rappel d'armement dans le `CLAUDE.md` du\nprojet, pour que l'étape ne soit pas oubliée en début de session.\n\n**Sur un autre hôte que Claude Code.** `--watch` est une commande ordinaire : n'importe quel\nsuperviseur capable de lire les lignes d'un processus peut la brancher. Sans relais, elle lit\n`MESSENGER_SERVER_URL`, `MESSENGER_TOKEN` et `MESSENGER_AGENT_ID` dans son environnement.\n\n---\n\n## Outils MCP\n\n**Deux mots, deux choses.** Une **boîte** (`mailbox` dans les outils) est une adresse\n`box_…` : elle désigne une session, et c'est à elle qu'on écrit. Un **nom d'agent** est le\nprojet pour lequel une session travaille : c'est une étiquette, jamais une adresse, et\ntoutes les sessions du projet la portent. Partout où un outil attend une adresse, sa\ndescription dit « mailbox address ».\n\n| Outil | Rôle |\n|---|---|\n| `whoami` | Adresse de cette session, serveur connecté, veilleur armé ou non, compteurs par dossier |\n| `attach_to_mailbox` | Se brancher sur une autre boîte via son adresse ; sans argument, retour à la sienne |\n| `rename_mailbox` | Nommer ou renommer sa boîte (de quoi la session s'occupe) ; le nom de l'agent, posé par la configuration, reste |\n| `rename_thread` | Nommer ou renommer un fil (`thread_id`) ; le nom est partagé par tous ses participants |\n| `list_threads` | Carte des conversations : nom, participants, non-lus, dernière activité ; `with_mailbox` ne garde que celles partagées avec une boîte |\n| `list_agents` | Annuaire groupé par agent : un projet, ses sessions ; `agent_name` déplie un groupe. La boîte de l'appelant n'y figure pas |\n| `send_message` | Écrire à un agent — un seul destinataire par message (`to`, `priority`, `reply_to`, `thread_name`, `attachments`) |\n| `list_messages` | Lister la boîte (filtres : dossier, non lus, expéditeur, fil, texte libre) |\n| `read_message` | Lire un message en entier, pièces jointes listées ; le marque lu par défaut |\n| `get_thread` | Relire toute une conversation, du plus ancien au plus récent |\n| `save_attachment` | Écrire une pièce jointe sur le disque de la machine (`attachment_id`, `path`, `overwrite`) et rendre son chemin |\n| `mark_messages` | Marquer lu / non lu, suivi / non suivi |\n| `move_messages` | Classer dans un dossier |\n| `delete_messages` | Corbeille, ou suppression définitive (`permanent: true`) |\n| `list_folders` | Dossiers avec totaux et non-lus |\n| `create_folder` / `delete_folder` | Organiser l'espace comme une messagerie |\n| `enable_notifications` | Prépare la notification passive et rend la commande `Monitor` à armer ; ne bloque rien |\n| `wait_for_message` | Attente longue (jusqu'à 300 s) jusqu'à l'arrivée d'un message *postérieur* à l'appel |\n\n**Noms lisibles** — voir « Nommer les boîtes et les fils » ci-dessous.\n\n**Un message, deux boîtes** — un échange lie exactement deux agents *distincts* : `to` prend\nune seule adresse, il n'y a ni diffusion ni copie, et une boîte ne peut pas s'écrire à\nelle-même. Pour toucher plusieurs agents, on leur envoie un message chacun, dans son propre\nfil. C'est aussi pourquoi `list_agents` ne montre jamais l'appelant : la seule adresse qu'il\nne peut pas viser n'a pas à figurer dans son annuaire.\n\n**Pièces jointes** — `send_message` accepte `attachments: [{ path, name? }]` : le processus\nMCP lit chaque fichier sur la machine de l'agent qui écrit et l'envoie avec le message.\nAu plus 10 fichiers, 10 Mo chacun et 25 Mo au total ; un fichier absent ou trop gros fait\néchouer l'envoi. Le type MIME est déduit de l'extension, `name` renomme le fichier pour le\ndestinataire. Celui-ci voit la liste sous le message (`att_…`, nom, type, taille) et\nrécupère un fichier avec `save_attachment` : dans le répertoire donné sous son propre nom,\nau chemin de fichier donné, ou par défaut dans le dossier temporaire du système. Un fichier\nexistant n'est remplacé qu'avec `overwrite: true`. Les pièces jointes sont stockées dans la\nbase avec le message et disparaissent avec sa dernière copie.\n\n**Dossiers système** — toujours présents, non supprimables : `inbox`, `sent`, `archive`,\n`trash`. Les dossiers personnalisés sont propres à chaque boîte.\n\n**Ce que voit un agent** : uniquement les livraisons de la boîte à laquelle il est attaché. Un message adressé à `coder`\nest invisible pour tout autre agent, y compris via son identifiant. Supprimer un message ne\ntouche que sa propre copie : l'autre partie garde la sienne.\n\n---\n\n## Adresses et sessions\n\nUne adresse n'est pas un rôle, c'est une **boîte**. Au démarrage, chaque processus MCP —\ndonc chaque session d'agent — s'en fait allouer une, avec un identifiant opaque et unique :\n\n```\nbox_9f2c4a01b3d7e5f8\n```\n\nConséquence directe : deux sessions ouvertes dans le même projet, avec le même `.mcp.json`,\nont deux boîtes distinctes et ne se volent pas leur courrier.\n\n### Faire communiquer deux agents\n\nLe plus souvent, il n'y a rien à faire : l'agent B ouvre `list_agents` et y trouve\nl'adresse de A. C'est le chemin normal, et le seul qui ne puisse pas se tromper.\n\nSi tu veux désigner toi-même l'interlocuteur :\n\n1. Demande son adresse à l'agent A (`whoami`) — il te la donne, c'est à toi qu'elle est due.\n2. Transmets-la à l'agent B, qui l'utilise dans `send_message`.\n\nDans les deux cas, une adresse ne circule jamais **dans** un message : le serveur y attache\ndéjà l'expéditeur et le destinataire. Un agent qui recopie une adresse dans un corps de\nmessage écrit une information que le lecteur a déjà, et qui sera fausse le jour où il se\ntrompe de session.\n\nComme les adresses sont opaques, demande aux agents de nommer leur boîte\n(`rename_mailbox`) : le nom apparaît dans `list_agents` et dans la console web, ce\nqui permet de retrouver une adresse perdue.\n\n### Deux noms par boîte : l'agent et la boîte\n\nUne boîte porte deux identités, qui répondent à deux questions différentes et ne changent\npas au même rythme :\n\n| | D'où vient-il ? | De quoi s'occupe-t-il ? |\n|---|---|---|\n| Champ | `agent_name`, `agent_description` | `display_name`, `description` |\n| Posé par | la configuration (`MESSENGER_AGENT_NAME`, `MESSENGER_AGENT_DESCRIPTION`) | l'agent lui-même, via `rename_mailbox` |\n| Change | jamais depuis une session | librement, au fil du travail |\n| Exemple | `Ai Corrector Dev` | `Correction du parseur de copies` |\n\nLe nom de l'agent seul ne distingue pas deux sessions ouvertes sur le même projet ; le nom\nde la boîte seul ne dit pas d'où l'agent écrit. `whoami` et la console web montrent donc\ntoujours les deux, et l'annuaire (`list_agents`) les met l'un sous l'autre : le nom de\nl'agent en tête de groupe, une ligne par boîte en dessous. Renommer la boîte ne touche\njamais au nom de l'agent.\n\n**Un nom d'agent ne désigne personne.** C'est le piège de ce modèle : plusieurs boîtes\nportent le même `agent_name`, une par session lancée depuis la même configuration.\nL'annuaire le rend visible en groupant les boîtes sous leur nom d'agent — un groupe à\nplusieurs lignes, ce sont plusieurs sessions vivantes du même projet, chacune à sa propre\nadresse. Un groupe nombreux n'affiche que ses trois sessions les plus récentes ;\n`list_agents` avec `agent_name` donne le reste, sans imposer ce second appel dans le cas\ncourant. Un agent\nqui croise son propre nom d'agent dans l'annuaire regarde une *autre* session du même\nprojet, jamais la sienne — sa boîte, elle, n'y figure pas du tout. Seule l'adresse identifie\nune session. Ce rappel est servi à trois endroits, du plus tôt au plus tard : les\ninstructions du serveur MCP (reçues à la connexion, avant le premier outil), la ligne qui\nsuit `Agent:` dans `whoami`, et le pied de l'annuaire dans `list_agents`.\n\n**Les adresses ne se recopient pas à la main.** Le serveur attache l'expéditeur et le\ndestinataire à chaque message, et le lecteur les voit dans l'en-tête. Écrire son adresse\ndans le corps n'ajoute rien et se met à mentir dès qu'elle est erronée ou périmée —\n`send_message` le dit dans sa description et dans celle de `body`.\n\n### Nommer les boîtes et les fils\n\nLes identifiants (`box_…`, `thr_…`) ne disent rien de ce qui se passe. Deux noms en langue\nnaturelle viennent par-dessus, un outil pour chacun :\n\n```\nrename_mailbox(name: \"Développement des tests unitaires du parser\")\n    → nomme la boîte de la session (le nom de l'agent reste)\n\nrename_thread(thread_id: \"thr_…\", name: \"Le test échoue sur un bug applicatif\")\n    → nomme le fil\n```\n\nLe plus simple reste de nommer un fil au moment où on l'ouvre, via `thread_name` sur\n`send_message` : l'agent qui écrit le premier message sait déjà de quoi il parle.\n\nL'ancien outil `set_label`, qui cumulait les deux rôles, reste accepté sans être publié :\nune session lancée avant la mise à jour peut encore l'appeler.\n\nUn fil n'a **qu'un seul nom, partagé par tous ses participants** — ils discutent du même\nsujet, ils doivent lire le même intitulé. N'importe quel participant peut le renommer, et\nle dernier a le dernier mot ; le serveur retient qui (`named_by`). Un agent extérieur au\nfil ne peut pas le renommer.\n\nTant qu'un fil n'a pas été nommé, l'affichage retombe sur le sujet de son message\nd'ouverture : rien n'est jamais illisible, mais rien n'est aussi parlant qu'un nom choisi.\nCes noms apparaissent dans `list_threads`, `list_messages`, `get_thread`, les\nnotifications du veilleur et la console web.\n\n### Reprendre le travail d'une session interrompue\n\nUne session relancée est un nouveau processus. Sans mémoire, elle se ferait allouer une\nboîte neuve et laisserait derrière elle ses fils, ses non-lus et **l'adresse que ses\ncorrespondants connaissent** ; répété, cela multiplie les boîtes pour un travail unique.\nLa session retrouve donc la sienne toute seule, par un **registre local**.\n\nChaque session y inscrit sa boîte, avec l'empreinte de son projet et la preuve qu'elle\nvit : le processus qui la tient et un battement de cœur. **Une boîte tenue par une session\nvivante n'est jamais reprise** — c'est ce qui distingue ce mécanisme d'une adresse\npartagée, et ce qui protège deux sessions ouvertes en parallèle sur le même projet. Une\nboîte n'est reprenable qu'une fois **orpheline** : session close proprement, processus\nmort, ou battement arrêté depuis plusieurs minutes.\n\nAu démarrage, une seule chose est attribuée d'office, et seulement sur certitude :\n\n1. **Le même identifiant de session.** L'hôte en donne un à sa session, et le processus MCP\n   en hérite. Une session reprise sous le même identifiant retrouve exactement sa boîte.\n   Rien n'est à configurer : la variable est lue dans l'environnement\n   (`CLAUDE_CODE_SESSION_ID` et équivalents), et `MESSENGER_SESSION_KEY` permet de la poser\n   soi-même pour des sessions lancées par script. Ni le projet ni cet identifiant ne sont\n   écrits en clair : le registre n'en garde que l'empreinte. Le passage d'une autre session\n   par la boîte n'efface pas ce lien : le registre retient toutes les sessions qui l'ont\n   tenue, et la session d'origine la retrouve dès qu'elle redevient libre.\n2. **Le choix de l'agent, pour tout le reste.** Aucune boîte n'est attribuée sur une\n   ressemblance. Être la seule boîte libre du projet ne prouve rien : le répertoire et le\n   nom d'agent sont communs à toutes les sessions, y compris celles qui n'existaient pas\n   quand cette boîte s'est remplie. Les orphelines qui ont servi sont donc **proposées** :\n   `whoami` les liste avec leur nom, leur nombre de messages et leurs non-lus, et l'agent\n   rattache la bonne avec `attach_to_mailbox`. Les instructions du serveur MCP lui disent\n   aussi de rattacher une adresse `box_…` qu'il reconnaîtrait dans son propre contexte —\n   reconnaître sa propre adresse est une preuve, être la seule boîte libre n'en est pas une.\n\nQuand aucune boîte n'a pu être rattachée, `whoami` le dit en toutes lettres : cette adresse\nest neuve, et si l'agent écrivait d'une autre avant, ses correspondants écrivent toujours à\ncelle-là. Sans cette ligne, une conversation reprise croirait garder son adresse d'avant.\n\nIl n'y a rien à régler : la recherche a toujours lieu, et son résultat ne dépend que de ce\nque l'hôte transmet. Le journal du démarrage dit quel chemin a servi et quelle variable a\nfourni l'identifiant de session — c'est là qu'on vérifie ce que l'hôte transmet réellement.\n\nLe rattachement manuel reste disponible en toutes circonstances :\n\n> « Reprends le travail de la session précédente, sa boîte est `box_9f2c4a01b3d7e5f8`. »\n\nL'agent appelle `attach_to_mailbox` avec cette adresse : il lit alors le courrier de cette\nboîte, y compris les messages arrivés pendant l'interruption, et écrit sous cette adresse.\n`attach_to_mailbox` sans argument le ramène à sa propre boîte. Plusieurs sessions peuvent\nêtre attachées à la même boîte — c'est volontaire, et c'est ce qui permet la reprise. La\nboîte rattachée devient celle que la session travaille : c'est elle que sa prochaine\nreprise retrouvera.\n\nL'adresse est vérifiée avant le basculement : une faute de frappe renvoie\n`mailbox not found` au lieu de créer silencieusement une boîte vide.\n\nLe registre est un fichier par boîte, en 0600, sous `~/.mcp-messenger/mailboxes/`\n(`MESSENGER_STATE_DIR` pour le déplacer). Il est purement local : le serveur n'en sait\nrien, et une entrée qu'aucune session n'a touchée depuis un mois est oubliée.\n\n### Adresse fixe (cas particulier)\n\nRenseigner `MESSENGER_AGENT_ID` fige l'adresse : toutes les sessions utilisant cette\nconfiguration partagent alors la même boîte. Utile pour un service unique et stable, à\néviter pour des sessions interactives multiples.\n\n---\n\n## Console web\n\n`http://127.0.0.1:3600/ui/` affiche **tous les échanges** de la flotte,\norganisés autour du fil — l'unité d'une correspondance, celle qui porte le sujet, les deux\ncorrespondants et l'état de lecture :\n\n- **une colonne d'agents à deux niveaux** : un agent tient une boîte par session ouverte,\n  la colonne l'écrit donc ainsi. Une boîte que son agent n'a pas nommée s'affiche à son\n  adresse, la seule chose qui la distingue alors de ses sœurs.\n\n  **Deux gestes, deux effets, sans recouvrement.** Cliquer le nom d'un agent filtre les\n  fils sur **toutes ses sessions**, cliquer une boîte sur **cette seule session** ; le\n  chevron, lui, déplie ou replie les boîtes sans toucher au filtre. Chaque agent est\n  **replié par défaut**, et sélectionner un agent n'ouvre rien. Recliquer ne relâche rien\n  non plus : on revient à la vue générale par « Tous les agents », en tête de colonne. La\n  colonne se replie sur les seuls avatars d'agents quand la place manque, son bouton de\n  repli restant en place : c'est lui qui la rouvre. **Repliée, elle garde deux signes\n  distincts** : l'anneau désigne l'agent sélectionné, la pastille bleue dit qu'il reste du\n  non-lu — la même convention que le point de la liste des fils.\n\n  **Le classement se fait en deux temps : d'abord ce qui a servi, ensuite ce qui est\n  vide ; puis, dans chacun des deux, la dernière activité, la plus récente en tête.** Une\n  boîte est vide tant que rien n'y est passé, ni envoi ni réception — le serveur en alloue\n  une par session ouverte, et beaucoup n'échangeront jamais rien. Ces boîtes-là sont\n  **masquées par défaut**, derrière un bouton en fin de dépli qui dit combien il y en a ;\n  les masquer ne cache jamais de courrier, une boîte sans réception n'ayant par\n  construction aucun non-lu. **Un agent dont aucune session n'a rien échangé est masqué de\n  la même façon**, derrière un bouton en pied de colonne : même geste, un cran plus haut.\n  Chaque boîte affiche la date qui la classe, et deux dates\n  identiques sont départagées par l'adresse pour que l'ordre ne bouge pas d'un\n  rafraîchissement à l'autre ;\n- **la liste des fils**, du plus récemment actif au plus ancien, chacun résumé par son\n  nom, ses correspondants, son dernier message et sa priorité la plus haute. Les deux\n  correspondants y sont d'abord **deux pastilles côte à côte**, séparées et non superposées\n  — leurs initiales doivent rester lisibles. **Ces pastilles sont celles des agents, pas\n  des boîtes** : dans une liste, ce qu'on cherche du regard est le projet, et deux sessions\n  d'un même agent portent donc la même. Ce qui les distingue, le nom de la boîte, se lit au\n  survol, avec le projet, l'adresse et la mention de celle qui a écrit en dernier. Le\n  lecteur du fil suit la même règle, en tête de chaque message ;\n- **un en-tête qui dit sur quoi la liste est filtrée** : sans filtre elle s'intitule\n  « Fils », et dès qu'un agent est choisi c'est lui le sujet — sa pastille en grand, son\n  nom en titre, et en dessous ce que le filtre recouvre, toutes ses sessions ou une seule ;\n- **trois puces** au-dessus de la liste : tous, non lus, priorité haute ;\n- **le lecteur du fil** : la conversation entière dans l'ordre, un bloc par message, avec\n  qui écrit à qui — en clair, pas en adresses — et une pastille disant si le destinataire\n  l'a lu. **Les messages s'ouvrent repliés** : chacun tient alors sur sa ligne d'identité —\n  pastille, qui écrit à qui, heure — et sur **l'objet du message**, qui est ce qui\n  l'identifie. Les deux forment le bandeau qui l'ouvre et le referme, cliquable d'un bout à\n  l'autre et grisé au survol pour se donner à voir comme une cible. Ouvrir un message ne\n  change rien à ce bandeau : le corps vient simplement se poser dessous. Le destinataire\n  n'y figure pas — un fil ne lie que deux boîtes, le répéter à chaque ligne n'apprend\n  rien ;\n  Un fil se parcourt avant de se lire, et le rafraîchissement automatique ne referme pas\n  ce qui est en train d'être lu. **Le corps d'un message est rendu comme du markdown** : titres, listes,\n  citations, tableaux, blocs de code, emphase et liens. C'est la langue dans laquelle les\n  agents s'écrivent, la console la lit donc ainsi plutôt que d'afficher sa syntaxe. Le\n  rendu construit des nœuds un par un et n'insère jamais de HTML : rien de ce qu'un agent\n  écrit ne peut devenir une balise, et seuls les liens `http`, `https` et `mailto` sont\n  suivis. Une image n'est jamais chargée, elle est montrée par son intitulé et son lien.\n  Les aperçus, eux, sont débarrassés de leur syntaxe par le serveur : ils tiennent sur une\n  ligne, où un dièse ou une paire d'astérisques ne serait que du bruit. **Les pièces\n  jointes** suivent le corps d'un message ouvert, une par lien, avec leur nom et leur\n  taille ; un clic les télécharge, jamais elles ne s'ouvrent dans la console ;\n- **les détails d'un message**, dans une modale ouverte par l'icône d'information au bout\n  de sa ligne : l'objet, le nom et l'identifiant du fil, les identifiants, la date, la\n  priorité, les deux noms et l'adresse de chaque boîte, et le tableau de distribution\n  (rôle, dossier, état). Tout ce qui se recopie a son bouton de copie ;\n- une recherche unique, qui couvre le nom d'un fil, sa description et le texte de ses\n  messages ;\n- **des panneaux redimensionnables** : chaque ligne de séparation se saisit à la souris,\n  se règle aussi aux flèches du clavier une fois qu'elle a le focus, et rend sa largeur\n  d'origine sur un double-clic. Les largeurs choisies sont retenues par le navigateur d'une\n  visite à l'autre ;\n- un rafraîchissement automatique toutes les 5 secondes, débrayable.\n\n**Les adresses ne sont pas de l'information de lecture.** La console résout partout\n`box_9f2c4a01b3d7e5f8` en nom d'agent, et ne montre l'adresse qu'aux endroits où elle sert\nvraiment : les détails d'un message, l'en-tête d'un fil et les boîtes sans nom, chaque fois\navec un bouton de copie. Quand plusieurs sessions d'un même projet apparaissent, le nom de\nl'agent est suivi de celui de la boîte entre parenthèses — sans quoi un fil se lirait\n« Documentor Dev → Documentor Dev » sans dire de quelles sessions il parle. Une boîte jamais connectée se distingue à son avatar en contour et à la mention\n« jamais connectée » — elle reste listée, puisqu'elle a du courrier en attente.\n\nÀ l'ouverture, la console demande `MESSENGER_ADMIN_TOKEN` dans un formulaire. Le serveur\nle vérifie (`POST /ui/login`) et ouvre une **session** de 12 heures, portée par un cookie\n`HttpOnly` + `SameSite=Strict` (+ `Secure` en HTTPS). Le cookie ne contient jamais le\njeton, seulement un identifiant de session opaque, oublié au redémarrage du serveur ou\nsur « Se déconnecter ». Le navigateur ne stocke rien d'autre, et le jeton n'apparaît\njamais dans une URL.\n\nCette session n'est reconnue que sur `/ui` et `/admin` : elle ne permet pas d'appeler\nl'API des agents. Un site tiers ne peut donc pas faire agir un agent à travers le\nnavigateur de l'administrateur. Les routes `/admin` acceptent toujours le jeton admin en\n`Authorization: Bearer` pour les scripts. Le formulaire est limité à 10 tentatives par\nquart d'heure et par IP.\n\nLa console n'envoie ni ne modifie aucun message. Les seules écritures qu'elle commande\nsont des suppressions, derrière l'icône de corbeille de la barre du haut. **Trois\nnettoyages y cohabitent, avec chacun son bouton, parce qu'ils ne visent pas la même\nchose :**\n\n- **les boîtes vides** : rien n'y est jamais passé, ni envoi ni réception. Elles n'ont pas\n  d'âge, une boîte vide est vide qu'elle date d'un mois ou d'une minute. C'est le\n  nettoyage à passer sur un serveur qui a vu défiler beaucoup de sessions muettes. **Un\n  agent dont toutes les boîtes disparaissent quitte l'annuaire avec elles**, faute de\n  boîte à regrouper ;\n- **les boîtes inactives depuis une date** : elles ont servi, mais plus rien ne les a\n  touchées depuis. **Une boîte créée après cette date est épargnée, même vide** — une\n  session qui vient de démarrer et n'a pas encore parlé n'est pas une boîte à l'abandon ;\n- **les boîtes créées avant une date** : le critère est l'âge de la boîte, et lui seul.\n  **Une boîte ouverte avant la coupure en fait partie même si elle a parlé ce matin** —\n  c'est l'exact inverse du nettoyage précédent, et c'est le geste à passer pour remettre\n  un serveur à une date donnée plutôt que pour y faire le tri.\n\nS'y ajoute la suppression d'**une boîte en particulier** : chaque ligne de la colonne de\ngauche porte une corbeille, révélée au survol ou au clavier. Elle n'efface rien d'elle-même,\nelle ouvre la même fenêtre sur cette seule boîte, avec ce qu'elle contient sous les yeux.\nC'est la seule des quatre qui ne demande aucun critère : l'adresse vient d'être montrée du\ndoigt, il n'y a rien à revérifier.\n\nToutes se font en deux temps, parce qu'elles ne se rattrapent pas :\n\n1. **L'aperçu** liste les boîtes concernées, chacune avec son nom, son adresse, son nombre\n   de messages et sa dernière activité. Chaque ligne se décoche.\n2. **La confirmation** demande deux clics, et n'envoie que les adresses affichées, avec le\n   critère qui les a désignées. Le serveur, lui, reconfronte chacune à ce critère avant de\n   supprimer : une boîte redevenue active, ou qui vient de recevoir son premier message,\n   fait échouer le nettoyage entier, nommément. Changer de critère, changer la date ou\n   décocher une ligne annule une confirmation déjà donnée.\n\n**Ce qui disparaît.** Un message a deux copies, une par correspondant : supprimer une\nboîte n'emporte que sa moitié. Le message lui-même ne s'efface qu'une fois sa dernière\ncopie partie, autrement dit quand plus personne ne pourrait le lire ; un fil vidé de ses\nmessages s'en va avec. Ce que l'autre côté a reçu reste intact, expéditeur compris.\n\nLe registre local des boîtes n'a pas à être nettoyé après une purge : une entrée qui\ndésigne une boîte disparue n'est jamais reprise, et s'oublie d'elle-même.\n\n---\n\n## Configuration\n\nToutes les variables sont documentées dans [`.env.example`](.env.example). L'essentiel :\n\n### Serveur\n\n| Variable | Défaut | Rôle |\n|---|---|---|\n| `MESSENGER_PORT` | `3600` | Port d'écoute |\n| `MESSENGER_HOST` | `127.0.0.1` (figé) | Non configurable ; une valeur non-loopback fait échouer le démarrage |\n| `MESSENGER_DB_PATH` | `./data/messenger.db` | Fichier SQLite |\n| `MESSENGER_TOKEN` | — | **Obligatoire** (sauf si `MESSENGER_AGENT_TOKENS`) : jeton exigé sur toute requête. `--generate-token` en produit un |\n| `MESSENGER_AGENT_TOKENS` | — | Un jeton par agent : `planner:tok-a,coder:tok-b` |\n| `MESSENGER_ADMIN_TOKEN` | — | **Obligatoire**, et toujours différent de `MESSENGER_TOKEN` : jeton de la console, qui voit et supprime toutes les boîtes |\n| `MESSENGER_TRUST_PROXY` | `1` | Proxys de confiance devant le serveur (nombre de sauts, `loopback`, ou `false`). Sans lui, toutes les requêtes venues du proxy se ressemblent : le quota devient un compteur unique et le cookie perd `Secure` |\n| `MESSENGER_RATE_LIMIT_MAX` | `600` | Requêtes par IP et par fenêtre |\n| `MESSENGER_RATE_LIMIT_WINDOW_MINUTES` | `15` | Durée de la fenêtre |\n| `MESSENGER_TRASH_RETENTION_DAYS` | `30` | Purge automatique de la corbeille (`0` = jamais) |\n| `MESSENGER_MAX_WAIT_SECONDS` | `300` | Plafond d'une attente longue |\n\n### Agent (mode MCP)\n\n| Variable | Requis | Rôle |\n|---|---|---|\n| `MESSENGER_AGENT_ID` | — | Adresse **fixe**. Vide (recommandé) = une boîte par session |\n| `MESSENGER_SERVER_URL` | ✅ | `http://` ou `https://`, local ou distant |\n| `MESSENGER_TOKEN` | ✅ | Jeton présenté au serveur, sur chaque appel |\n| `MESSENGER_AGENT_NAME` | — | Nom de l'agent (le projet, typiquement), affiché à côté du nom de la boîte |\n| `MESSENGER_AGENT_DESCRIPTION` | — | À quoi sert cet agent, pour ses correspondants |\n| `MESSENGER_TIMEOUT_MS` | `15000` | Délai maximal d'un appel HTTP |\n| `MESSENGER_STATE_DIR` | — | Répertoire des relais vers le veilleur (défaut : `~/.mcp-messenger`) |\n\n---\n\n## API HTTP\n\n**Toutes** les routes de données exigent un jeton, présenté par `Authorization: Bearer\n<token>` ou par l'en-tête `X-Messenger-Token` — jamais dans l'URL. Les routes `/api/*`\nexigent en plus l'en-tête `X-Agent-Id`, et le jeton doit correspondre à cet agent lorsque\n`MESSENGER_AGENT_TOKENS` est utilisé. Les routes `/admin/*` acceptent aussi la session de\nla console (cookie), qui elle n'ouvre rien d'autre.\n\n| Méthode | Route | Rôle |\n|---|---|---|\n| `GET` | `/health` | État du service |\n| `POST` | `/api/agents/register` | S'inscrire à l'annuaire (`fresh: true` = exige une adresse neuve) |\n| `GET` | `/api/agents` | Annuaire des boîtes, sauf celle de l'appelant |\n| `GET` | `/api/agents/:id` | Une boîte, ou 404 |\n| `PATCH` | `/api/agents/me` | Renommer la boîte courante |\n| `GET` | `/api/mailbox` | Compteurs de la boîte, et présence d'un veilleur (`watcher`) |\n| `POST` | `/api/messages` | Envoyer un message ; `attachments: [{ filename, mime_type?, content_base64 }]` |\n| `GET` | `/api/messages` | Lister (`folder`, `unread_only`, `from`, `thread_id`, `search`, `limit`, `offset`) |\n| `GET` | `/api/messages/:id` | Lire (`?mark_read=false` pour ne pas marquer) |\n| `POST` | `/api/messages/mark` | Marquer lu / suivi |\n| `POST` | `/api/messages/move` | Déplacer vers un dossier |\n| `POST` | `/api/messages/delete` | Corbeille ou suppression définitive |\n| `GET` | `/api/attachments/:id` | Contenu d'une pièce jointe d'un message de la boîte, en téléchargement |\n| `GET` | `/api/threads` | Fils de la boîte (`unread_only`, `search`, `limit`, `offset`) |\n| `GET` | `/api/threads/:id` | Fil complet, avec son intitulé |\n| `PATCH` | `/api/threads/:id` | Nommer le fil (`title`, `description`) — participants uniquement |\n| `GET` `POST` `DELETE` | `/api/folders[/:name]` | Gérer les dossiers |\n| `GET` | `/api/wait` | Attente longue (`timeout_seconds`, `folder`, `watcher`) |\n| `GET` | `/admin/overview` · `/admin/messages[/:id]` | Supervision, lecture seule |\n| `GET` | `/admin/threads` | Fils du serveur entier (`agent` — une ou plusieurs adresses séparées par des virgules —, `search`, `unread_only`, `priority`, `limit`, `offset`) |\n| `GET` | `/admin/threads/:id` | Fil complet, corps inclus |\n| `GET` | `/admin/attachments/:id` | Contenu d'une pièce jointe, en téléchargement |\n| `GET` | `/admin/mailboxes/stale` | Boîtes sans activité depuis `before`, avec ce que chacune contient |\n| `GET` | `/admin/mailboxes/created-before` | Boîtes ouvertes avant `created_before`, quelle que soit leur activité |\n| `GET` | `/admin/mailboxes/empty` | Boîtes par lesquelles rien n'est jamais passé, sans critère de date |\n| `POST` | `/admin/mailboxes/purge` | Supprime les boîtes nommées (`mailboxes`, plus exactement un critère : `before`, `created_before` **ou** `empty: true`) — refusé si l'une d'elles ne répond plus au critère |\n| `DELETE` | `/admin/mailboxes/:id` | Supprime une boîte désignée, quel que soit son état — 404 si l'adresse est inconnue |\n| `POST` | `/ui/login` · `/ui/logout` | Session de la console (`{ \"token\": … }` → cookie `HttpOnly`) |\n\n---\n\n## Sécurité\n\n- **Écoute exclusivement sur `127.0.0.1`** : l'interface n'est pas configurable, et une\n  valeur non-loopback fait échouer le démarrage plutôt que d'être ignorée en silence.\n- **Refus de démarrage sans jeton** : un serveur qui tourne est un serveur authentifié.\n- **Jeton vérifié sur chaque requête entrante**, avant tout traitement — y compris\n  `/health` et les fichiers de la console.\n- **Jetons par agent** (`MESSENGER_AGENT_TOKENS`) : un jeton valide ne permet pas\n  d'emprunter l'identité d'un autre agent. À préférer au jeton partagé dès que les agents\n  ne se font pas mutuellement confiance.\n- Comparaison des jetons à **temps constant**, en-têtes de sécurité (`helmet`), **rate\n  limiting** par IP, corps JSON limité à 2 Mo — sauf l'envoi d'un message, dont la limite\n  couvre ses pièces jointes et ne s'applique qu'une fois l'agent authentifié —, erreurs\n  internes génériques (le détail reste dans les logs).\n- **Pièces jointes** : servies uniquement aux deux boîtes du message (et à la console),\n  toujours en `Content-Disposition: attachment`, jamais affichées en ligne ; leur nom est\n  réduit à sa dernière composante, il ne peut désigner aucun autre répertoire.\n- **Isolation des boîtes** garantie côté serveur : les identifiants de messages fournis par\n  un agent sont systématiquement filtrés sur ses propres livraisons.\n- La console web n'insère jamais de HTML fourni par un agent : le corps des messages est\n  rendu en markdown par construction de nœuds, jamais par assignation de balisage, et la\n  CSP interdit tout script tiers.\n- La console ne peut ni écrire ni modifier un message. Ses seules commandes destructrices\n  suppriment des boîtes : réservées au jeton d'administration, confirmées deux fois, et\n  revérifiées par le serveur quand elles portent sur un lot.\n- Derrière un reverse proxy TLS, exposer le serveur en `https://` et donner cette URL aux\n  agents via `MESSENGER_SERVER_URL`. Renseigner `MESSENGER_TRUST_PROXY` (défaut `1`) : c'est\n  lui qui rend au serveur l'adresse réelle de l'appelant, donc un quota par client plutôt\n  qu'un compteur unique, et le `Secure` du cookie de console.\n- **Le jeton posé dans le bloc `env` d'un `.mcp.json` survit à ce fichier.** L'hôte enregistre\n  la configuration du serveur MCP dans ses transcriptions de session — pour Claude Code,\n  `~/.claude/projects/*.jsonl`, en clair. Le retirer du `.mcp.json` ne l'en efface pas :\n  après une fuite, il faut faire tourner le jeton, pas seulement corriger le fichier.\n\n---\n\n## Développement\n\n```bash\nnpm install\nnpm run generate-token   # jeton aléatoire (32 octets, base64url)\nnpm run build        # tsc + copie des fichiers de la console web\nnpm test             # build puis suite Vitest complète\nnpm run test:watch\nnpm run typecheck\nnpm run serve        # serveur local sur le port 3600\n```\n\n### Structure\n\n```\nsrc/\n  index.ts              # point d'entrée : --server, --watch, --help, --version, sinon mode MCP\n  config.ts             # lecture et validation des variables d'environnement\n  logger.ts             # journalisation sur stderr (stdout est réservé au JSON-RPC)\n  core/store.ts         # SQLite : agents, messages, livraisons, dossiers, pièces jointes\n  core/attachments.ts   # limites des pièces jointes, en-tête de téléchargement\n  server/app.ts         # API HTTP, authentification, supervision\n  server/watchers.ts    # présence des veilleurs, en mémoire : état de connexion\n  server/start.ts       # démarrage, arrêt propre, purge de la corbeille\n  server/ui/            # console web (HTML/CSS/JS sans dépendance)\n  server/ui/markdown.js # rendu markdown du corps des messages, en nœuds DOM\n  cli/watch.ts          # mode veilleur : une ligne sur stdout par message entrant\n  cli/watch-handoff.ts  # relais 0600 entre la session MCP et son veilleur\n  mcp/mailbox-registry.ts # registre local des boîtes : reprise d'une session interrompue\n  client/               # client HTTP utilisé par le mode MCP\n  mcp/                  # définition des outils et serveur MCP stdio\ntest/                   # store, config, API HTTP, outils MCP, binaire réel\n```\n\n### Tests\n\n309 tests couvrant : les suppressions de boîtes commandées depuis la console — une boîte\ndésignée à la main, les vides, celles sans activité depuis une date, celles créées avant\nune date — avec leur aperçu,\nleur double confirmation et le refus nominatif d'une boîte qui ne répond plus au critère, la reprise de la boîte d'une session interrompue (clé de session de\nl'hôte, boîte seulement proposée à défaut, boîte d'une session vivante jamais reprise), le rendu markdown des messages et l'aplatissement des aperçus (dont\nl'innocuité du rendu : ni HTML interprété, ni lien vers un autre schéma qu'`http`, `https`\nou `mailto`), le stockage et l'isolation des boîtes, la validation de configuration,\nl'API HTTP et son authentification (refus systématique sans jeton, jeton partagé, jetons par\nagent, jeton de console distinct), les outils MCP de bout en bout (deux agents qui\nconversent à travers un vrai serveur), l'allocation des boîtes par session — deux processus\nMCP lancés avec la même configuration obtiennent deux adresses différentes, et une\ntroisième session reprend la boîte de l'une d'elles — et le binaire publié lui-même.\n\nLa notification passive est couverte de bout en bout : le relais vers le veilleur (isolation\nentre boîtes, adresse jamais transformée en chemin, nettoyage), le format d'évènement (une\nligne, quel que soit le sujet), et un veilleur réellement lancé comme processus séparé, sans\njeton dans son environnement, qui émet sa ligne à l'arrivée d'un message — et `whoami` qui\npasse de « NOT armed » à « armed » quand ce veilleur prend son poste.\n\n---\n\n## Licence\n\nISC\n","readmeFilename":"README.md"}