{"_id":"@earendil-works/pi-mcp","_rev":"13-48ec29d74f056965fbcd3cc88cf72d63","name":"@earendil-works/pi-mcp","dist-tags":{"latest":"1.4.0"},"versions":{"0.0.1":{"name":"@earendil-works/pi-mcp","version":"0.0.1","license":"MIT","_id":"@earendil-works/pi-mcp@0.0.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"dist":{"shasum":"aeaee5e131dd3d165d07210e1fcec3aecd28e424","tarball":"https://registry.npmjs.org/@earendil-works/pi-mcp/-/pi-mcp-0.0.1.tgz","fileCount":2,"integrity":"sha512-hdNttQXDDjIJhvyiU48shJLzqsDot5USO77hKtIUKvxBYXEc/Q6/+PlG4dlrP11mDCaPGMy1M4y7f5qj7u9jOA==","signatures":[{"sig":"MEUCIAX37DEHrDDora5UJEQBZBr/fRrW8f1n2jtN7PfsJ/baAiEAmCI5N7V6RtgWVTGHpX+mBI1mKHmPOKj1UY803mo+BOk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":530},"_npmUser":{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.15.0","description":"Placeholder to register the package name. Real releases are published from https://github.com/earendil-works/pi.","directories":{},"_nodeVersion":"25.8.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-mcp_0.0.1_1790700968200_0.599373955149515","host":"s3://npm-registry-packages-npm-production"}},"0.99.0":{"name":"@earendil-works/pi-mcp","version":"0.99.0","keywords":["mcp","model-context-protocol","client"],"author":{"name":"Earendil Works"},"license":"MIT","_id":"@earendil-works/pi-mcp@0.99.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"dist":{"shasum":"7f571eb964dde02666e939e772fbf0c9196df2f3","tarball":"https://registry.npmjs.org/@earendil-works/pi-mcp/-/pi-mcp-0.99.0.tgz","fileCount":76,"integrity":"sha512-9bt7QOZHMczU+bxO1VJdYMPeX54QdTSxE5Q+KbAi06GwOh+RUH2FTJCD7PZ1Av+oOJcTGTqr9CkvHtEUIFSuYg==","signatures":[{"sig":"MEQCIEFXi8PJTOzXTCo+n6gWcWx8ghx1H4SkzgCqfGmWB2mpAiAqvhP/HblvRjaWpi5yWNXh3mInbfQD2mYM+2VlBbOqtg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHwocPlj2z5LRxqz6v+zG4Hp/29qLmsqEYJFjDMI9n/+AiAi7WWbrXeTJS/LXsPBXWKQSe5Ud3UdaXFUIeM5zFE/4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-mcp@0.99.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":362141},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"},"./oauth":{"types":"./dist/oauth/index.d.ts","import":"./dist/oauth/index.js","source":"./src/oauth/index.ts"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js","source":"./src/testing/index.ts"}},"gitHead":"4b060d3a98618019adb9985d517516c8e99a2bbe","scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"f490702b-168a-43b8-abc9-8ab9adf49e0b"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.16.0","description":"Standalone Model Context Protocol client for pi and other applications","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"cross-spawn":"7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"shx":"0.4.0","vitest":"4.1.11","@types/cross-spawn":"6.0.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-mcp_0.99.0_1790702251923_0.6264926180629915","host":"s3://npm-registry-packages-npm-production"}},"0.99.1":{"name":"@earendil-works/pi-mcp","version":"0.99.1","keywords":["mcp","model-context-protocol","client"],"author":{"name":"Earendil Works"},"license":"MIT","_id":"@earendil-works/pi-mcp@0.99.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"dist":{"shasum":"c2002b819a5d75d9cfa8091171580f794c205042","tarball":"https://registry.npmjs.org/@earendil-works/pi-mcp/-/pi-mcp-0.99.1.tgz","fileCount":76,"integrity":"sha512-YCFGPkmDzLwQuIzwfbP6Vuk/g/ukKpZhwTpbcfzomuI1Fkiu6hHRkOGwAqsO3G8cTkZWkM8vmOkFJjStQNC4qA==","signatures":[{"sig":"MEYCIQDApgVrPEQCPmhNlmcKaoCdfbn5/SLOA1hXA4cLFmU2RAIhAPBAYRCOyrzO0slsr0dn0jsx7/HxQF/w0/QyRGcOCNve","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDPrL2estZfBZNg8yLB2uEAxPchbiigFFoQLEMh98/bTwIgUsV7OwafBH60rqyAM4Rax4RQTxGTYkHQrVGE4B/icLA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-mcp@0.99.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":362167},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"},"./oauth":{"types":"./dist/oauth/index.d.ts","import":"./dist/oauth/index.js","source":"./src/oauth/index.ts"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js","source":"./src/testing/index.ts"}},"gitHead":"d86654abb8862e201933517d6f1fce9f88dd117f","scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"f490702b-168a-43b8-abc9-8ab9adf49e0b"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.16.0","description":"Standalone Model Context Protocol client for pi and other applications","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"cross-spawn":"7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"shx":"0.4.0","vitest":"4.1.11","@types/cross-spawn":"6.0.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-mcp_0.99.1_1790705939488_0.9437280307239981","host":"s3://npm-registry-packages-npm-production"}},"0.99.2":{"name":"@earendil-works/pi-mcp","version":"0.99.2","keywords":["mcp","model-context-protocol","client"],"author":{"name":"Earendil Works"},"license":"MIT","_id":"@earendil-works/pi-mcp@0.99.2","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"dist":{"shasum":"1b360a332266cd8ca7634a6d56e2e8e40fd03d07","tarball":"https://registry.npmjs.org/@earendil-works/pi-mcp/-/pi-mcp-0.99.2.tgz","fileCount":76,"integrity":"sha512-ISk6OIsiUzmULF+sUilLnENGKo9/gVDxZG2CTEq8f4dbp70AXOr/hMiwOjtcrlX6xBd4UMUsIz4EPTOlU6U+HA==","signatures":[{"sig":"MEYCIQDYszl15YKx00TsUlrFE1+6ZGKEP8PObSmrXGubUof5jQIhAPRCU4jjZjSRpopZVXuJCLy4a4f4CL4q5VktpBEylvWw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCgNA03hHmpM97pD+JG7jNlU/5136EK2q7yjjyWpJN6egIhANIsnwKWBDFJVeh8dr3Ay5y/Yl2+pX6M0v+fCEe+GiT2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-mcp@0.99.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":363139},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"},"./oauth":{"types":"./dist/oauth/index.d.ts","import":"./dist/oauth/index.js","source":"./src/oauth/index.ts"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js","source":"./src/testing/index.ts"}},"gitHead":"005af57d88ee23b33778f343a9595b32e67ff788","scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"f490702b-168a-43b8-abc9-8ab9adf49e0b"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.16.0","description":"Standalone Model Context Protocol client for pi and other applications","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"cross-spawn":"7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"shx":"0.4.0","vitest":"4.1.11","@types/cross-spawn":"6.0.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-mcp_0.99.2_1790796254461_0.7671465245679059","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@earendil-works/pi-mcp","version":"1.0.0","keywords":["mcp","model-context-protocol","client"],"author":{"name":"Earendil Works"},"license":"MIT","_id":"@earendil-works/pi-mcp@1.0.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"dist":{"shasum":"6f08a86735e7a4801d725ccdfd9e6983d8c64aca","tarball":"https://registry.npmjs.org/@earendil-works/pi-mcp/-/pi-mcp-1.0.0.tgz","fileCount":76,"integrity":"sha512-rYra0aF5iPmJd+fsB+VBuqxWNABGJ3Iiyhg0CqIc/91ta2n7IvQmCp0Cac/YkUTNnvRsVZnjgAiBkRi6+ouWuw==","signatures":[{"sig":"MEQCID1SQAfQqT8epKkfhUCTnIcn00ifLWfwc+Is4DJTfUGeAiBrbIjLPtnzuQ7lwng4KS0OIm+yd8FR5MIHwcJVLudYGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEVvqcrzPCWYvc7eTvitjQCDWcVOnyD1jHtjsF+cG6otAiA5LEP/++WY0jcR6HKEoeCIG+s0oj40lfzu9CkNBJA0pw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-mcp@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":377045},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"},"./oauth":{"types":"./dist/oauth/index.d.ts","import":"./dist/oauth/index.js","source":"./src/oauth/index.ts"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js","source":"./src/testing/index.ts"}},"gitHead":"a13d35a742c6ef8462812a28fbe1d8c8b7431c32","scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"f490702b-168a-43b8-abc9-8ab9adf49e0b"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.16.0","description":"Standalone Model Context Protocol client for pi and other applications","directories":{},"sideEffects":false,"_nodeVersion":"22.23.3","dependencies":{"cross-spawn":"7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"shx":"0.4.0","vitest":"4.1.11","@types/cross-spawn":"6.0.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-mcp_1.0.0_1790881864311_0.9232351280298614","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@earendil-works/pi-mcp","version":"1.0.1","keywords":["mcp","model-context-protocol","client"],"author":{"name":"Earendil Works"},"license":"MIT","_id":"@earendil-works/pi-mcp@1.0.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"dist":{"shasum":"5d45ee65f5b41cd9fffc4d78d4b630ad9771f61f","tarball":"https://registry.npmjs.org/@earendil-works/pi-mcp/-/pi-mcp-1.0.1.tgz","fileCount":76,"integrity":"sha512-XuhcCpNT9FgsMQTzjmwy2hbakg9CODcDHtC+KeHfr37HjKdj4QsfOrOThxLXYRN4kmC5HDvFyLzthAnHe/T4jw==","signatures":[{"sig":"MEYCIQCHv4EbKjl7sGJiNajE4ECXlqblhytZd7Kpe53XMfuENAIhAJBr1Cm2ErawE8hMiVJShZ8LyD2aHR2WrG/itPDmLcZs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHoAPeKyyCmZS0B+gdpoonE2apw8z4kNQXp48hxvdI3BAiAhDhs+d2c2125jUAmADMAJR+GOPgEGnZUlqtp5H1OcWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-mcp@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":382804},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"},"./oauth":{"types":"./dist/oauth/index.d.ts","import":"./dist/oauth/index.js","source":"./src/oauth/index.ts"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js","source":"./src/testing/index.ts"}},"gitHead":"a7229ddc21810d6245105978033b7df645ecc2f7","scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"f490702b-168a-43b8-abc9-8ab9adf49e0b"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.16.0","description":"Standalone Model Context Protocol client for pi and other applications","directories":{},"sideEffects":false,"_nodeVersion":"22.23.3","dependencies":{"cross-spawn":"7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"shx":"0.4.0","vitest":"4.1.11","@types/cross-spawn":"6.0.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-mcp_1.0.1_1791030625693_0.8470661131827779","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@earendil-works/pi-mcp","version":"1.0.2","keywords":["mcp","model-context-protocol","client"],"author":{"name":"Earendil Works"},"license":"MIT","_id":"@earendil-works/pi-mcp@1.0.2","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"dist":{"shasum":"a48b3b1e83281076a1de7e15fd1c8b4a91171782","tarball":"https://registry.npmjs.org/@earendil-works/pi-mcp/-/pi-mcp-1.0.2.tgz","fileCount":76,"integrity":"sha512-ED3+q41xLQkxzdadZIQy68SLYcqCJbve8iGbGkZoWjPJ9OZCPHTKcof24fjMO1LfnbIl1uMfhRBueS6IfdiCbQ==","signatures":[{"sig":"MEUCIQDe7G4bujYRQaD5ZhrpnmMGubi6EIcP6omF9Cwo3IGZXQIgF8umij0MOGS5cC+zcw+LssAu0eUFtZISXBb+0lc6YIw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBF9L0gLgFr/x/60J6hCAeej+3GL8/3qoCOBMGz6uTXgAiABiUcwhFlQ5I+AaI1IibAFS8/x2Y/kp7kOUgLxDHrn6g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-mcp@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":382829},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"},"./oauth":{"types":"./dist/oauth/index.d.ts","import":"./dist/oauth/index.js","source":"./src/oauth/index.ts"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js","source":"./src/testing/index.ts"}},"gitHead":"cd32f7725fdbddbaecdff5b1e68491563394e0ca","scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"f490702b-168a-43b8-abc9-8ab9adf49e0b"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.16.0","description":"Standalone Model Context Protocol client for pi and other applications","directories":{},"sideEffects":false,"_nodeVersion":"22.23.3","dependencies":{"cross-spawn":"7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"shx":"0.4.0","vitest":"4.1.11","@types/cross-spawn":"6.0.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-mcp_1.0.2_1791075132701_0.7928874398873347","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@earendil-works/pi-mcp","version":"1.0.3","keywords":["mcp","model-context-protocol","client"],"author":{"name":"Earendil Works"},"license":"MIT","_id":"@earendil-works/pi-mcp@1.0.3","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"dist":{"shasum":"0138f6a96c06c21edca86172c0270007ed1d183f","tarball":"https://registry.npmjs.org/@earendil-works/pi-mcp/-/pi-mcp-1.0.3.tgz","fileCount":76,"integrity":"sha512-ZAhL/g0rpjyKtcKzD0jSDk7sFIrMCQocmKtpAE1F9eRnI5fGGVWUyiZwALG/Tn1sagzxFbSqtc29zGx5OvDDGA==","signatures":[{"sig":"MEYCIQDXe798fA/LJ1RpoRUBycGTFbNldKSWMyc9XbG/vAA8PwIhAJcnmavQemJz0I5SmPVVSTyRPj6omIweCXMdaTNf25vd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCZj03Vs1cvexq1vt5zDIgYbyv4ChwQAkATzoDBhPFW0wIhAIsExX77JHfFVy8MRjJjFG2kJb4mzaabk2RVMCAGrBky","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-mcp@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":382854},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"},"./oauth":{"types":"./dist/oauth/index.d.ts","import":"./dist/oauth/index.js","source":"./src/oauth/index.ts"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js","source":"./src/testing/index.ts"}},"gitHead":"d78dc83d633229d12f8b79631384c4c2717c399f","scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"f490702b-168a-43b8-abc9-8ab9adf49e0b"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.16.0","description":"Standalone Model Context Protocol client for pi and other applications","directories":{},"sideEffects":false,"_nodeVersion":"22.23.3","dependencies":{"cross-spawn":"7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"shx":"0.4.0","vitest":"4.1.11","@types/cross-spawn":"6.0.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-mcp_1.0.3_1791189189772_0.07815207033226645","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@earendil-works/pi-mcp","version":"1.0.4","keywords":["mcp","model-context-protocol","client"],"author":{"name":"Earendil Works"},"license":"MIT","_id":"@earendil-works/pi-mcp@1.0.4","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"dist":{"shasum":"73aa5fa6c988211b71775d443ad1124e64f81935","tarball":"https://registry.npmjs.org/@earendil-works/pi-mcp/-/pi-mcp-1.0.4.tgz","fileCount":76,"integrity":"sha512-I6SqOqrKED+XrjkkFIXY7Ze38QtXtjojPJlQsJ2v5soCPV4QI1bNxXDwQaqzZ2a+6pNN8meWrRw1qkSMbPy9QQ==","signatures":[{"sig":"MEUCIQDLncKs5EXPRvVwUmWnMigkioh3HzNdcwb7zgnMxhra7gIgdE8H8s2yBzAYOOHX656A7Ua7l8W31M3K6efGjNd70DM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDCqudkAhA2SC6gpPa8XNdC/wzQ0y2GT7N7Nu3fIS4AwwIgYofgg++xYUMUH01XX+adcSjgDlEsbAK53VhcSlMdaBk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-mcp@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":385736},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"},"./oauth":{"types":"./dist/oauth/index.d.ts","import":"./dist/oauth/index.js","source":"./src/oauth/index.ts"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js","source":"./src/testing/index.ts"}},"gitHead":"7c10bd4337495ee613f2224843ecdf349b80d1df","scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"f490702b-168a-43b8-abc9-8ab9adf49e0b"}},"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.16.0","description":"Standalone Model Context Protocol client for pi and other applications","directories":{},"sideEffects":false,"_nodeVersion":"22.23.3","dependencies":{"cross-spawn":"7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"shx":"0.4.0","vitest":"4.1.11","@types/cross-spawn":"6.0.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-mcp_1.0.4_1791236771582_0.7464344517489838","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@earendil-works/pi-mcp","version":"1.1.0","keywords":["mcp","model-context-protocol","client"],"author":{"name":"Earendil Works"},"license":"MIT","_id":"@earendil-works/pi-mcp@1.1.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"dist":{"shasum":"82e7d026805ec75de416abc8773db9f7ff51c79e","tarball":"https://registry.npmjs.org/@earendil-works/pi-mcp/-/pi-mcp-1.1.0.tgz","fileCount":76,"integrity":"sha512-xGKwvu3SvVTeoIx8Z7UGoJprB4VK20wKORMhufcWGx61fIauhu3J+UqfB5eeoF1oE/geYBA598K6nh1SdABQkg==","signatures":[{"sig":"MEUCIQD7n9fKwim6TzVLb3WSe0ydvQTyyMPgzQuHSsSJvh0MYwIgVZx8LWP64Hg3hCNQQHEpE9AroG8rxTr7zSU19ZSVerM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCTN4L5tmeLqhUpSXSRlzEV+rOUjoVjr+5y+WhjzPyVzwIgGSBrT53o8PH/rKfLcoBvC6CCwPARdyhPHbgGYrRYmgM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-mcp@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":389636},"main":"./dist/index.js","type":"module","_from":"file:/tmp/pi-package-artifacts-gBWTz8/tarballs/earendil-works-pi-mcp-1.1.0-c462b0beedd2.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"},"./oauth":{"types":"./dist/oauth/index.d.ts","import":"./dist/oauth/index.js","source":"./src/oauth/index.ts"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js","source":"./src/testing/index.ts"}},"scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"f490702b-168a-43b8-abc9-8ab9adf49e0b"}},"_resolved":"/tmp/pi-package-artifacts-gBWTz8/tarballs/earendil-works-pi-mcp-1.1.0-c462b0beedd2.tgz","_integrity":"sha512-xGKwvu3SvVTeoIx8Z7UGoJprB4VK20wKORMhufcWGx61fIauhu3J+UqfB5eeoF1oE/geYBA598K6nh1SdABQkg==","repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.16.0","description":"Standalone Model Context Protocol client for pi and other applications","directories":{},"sideEffects":false,"_nodeVersion":"22.23.3","dependencies":{"cross-spawn":"7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"shx":"0.3.4","vitest":"4.1.11","@types/cross-spawn":"6.0.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-mcp_1.1.0_1791411279714_0.9955216162076699","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@earendil-works/pi-mcp","version":"1.2.0","keywords":["mcp","model-context-protocol","client"],"author":{"name":"Earendil Works"},"license":"MIT","_id":"@earendil-works/pi-mcp@1.2.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"dist":{"shasum":"1f0706abc3eb2e3c46477b803c26125271590943","tarball":"https://registry.npmjs.org/@earendil-works/pi-mcp/-/pi-mcp-1.2.0.tgz","fileCount":76,"integrity":"sha512-ertUv40rUBgssTzw2lIPlejjIBdhvdg4uw+whWCDJYKYHU+ldp1ezhbB0BzwpBfnwef6/YN+m6eKLscj+r3p7w==","signatures":[{"sig":"MEUCIA4tFuo3TQVNiGaQ2ndwClHpvtjkXsBMU3jLbazyYyheAiEAmATcSlhtzX9m+aFKAgoBn3OC5O5nnDHP79apkV7cqq4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBDpm0uP/XZBOLEMrhnhiA6TqE7SWGCLk2+6zxYSvdQlAiAcz9mbOSxlMNM/kb0VRsa7KuRyxc6zVt2zqTwbgFYzsg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-mcp@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":394127},"main":"./dist/index.js","type":"module","_from":"file:/tmp/pi-package-artifacts-Jw8Saj/tarballs/earendil-works-pi-mcp-1.2.0-7abb54bf8d2b.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"},"./oauth":{"types":"./dist/oauth/index.d.ts","import":"./dist/oauth/index.js","source":"./src/oauth/index.ts"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js","source":"./src/testing/index.ts"}},"scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"f490702b-168a-43b8-abc9-8ab9adf49e0b"}},"_resolved":"/tmp/pi-package-artifacts-Jw8Saj/tarballs/earendil-works-pi-mcp-1.2.0-7abb54bf8d2b.tgz","_integrity":"sha512-ertUv40rUBgssTzw2lIPlejjIBdhvdg4uw+whWCDJYKYHU+ldp1ezhbB0BzwpBfnwef6/YN+m6eKLscj+r3p7w==","repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.16.0","description":"Standalone Model Context Protocol client for pi and other applications","directories":{},"sideEffects":false,"_nodeVersion":"22.23.3","dependencies":{"cross-spawn":"7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"shx":"0.3.4","vitest":"4.1.11","@types/cross-spawn":"6.0.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-mcp_1.2.0_1791846029255_0.2820912567938487","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@earendil-works/pi-mcp","version":"1.3.0","keywords":["mcp","model-context-protocol","client"],"author":{"name":"Earendil Works"},"license":"MIT","_id":"@earendil-works/pi-mcp@1.3.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"homepage":"https://github.com/earendil-works/pi#readme","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"dist":{"shasum":"9d4752841ed670439f11c0f5855a0339a27a33ed","tarball":"https://registry.npmjs.org/@earendil-works/pi-mcp/-/pi-mcp-1.3.0.tgz","fileCount":76,"integrity":"sha512-lbktLplmdGamM2t460Q0ziNEfpUEHDTVNf79g/AialJ3XZ+SHgNqa/OJXRR+fU+GV/l+gBhRPcyP8XkQlv8Avw==","signatures":[{"sig":"MEUCIQCjsMy4RQU0Cd8n1bq9PBjU+82S7TSrVwaoAuYRJcu5igIgHk6haUSrWPnRvHZfInnqkgPjQWFUzseqxM9O5YIi6kI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIC9h5u3DVeKN32xHEKOsIgG8e5OaHygyItzSWVk+3I03AiBUjXIDYa2rYh5nvAMhvMH64DnJOQGaTohQ07ds+appmw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-mcp@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":394152},"main":"./dist/index.js","type":"module","_from":"file:/tmp/pi-package-artifacts-O3jHRV/tarballs/earendil-works-pi-mcp-1.3.0-95b92d2e9966.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"},"./oauth":{"types":"./dist/oauth/index.d.ts","import":"./dist/oauth/index.js","source":"./src/oauth/index.ts"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js","source":"./src/testing/index.ts"}},"scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"f490702b-168a-43b8-abc9-8ab9adf49e0b"}},"_resolved":"/tmp/pi-package-artifacts-O3jHRV/tarballs/earendil-works-pi-mcp-1.3.0-95b92d2e9966.tgz","_integrity":"sha512-lbktLplmdGamM2t460Q0ziNEfpUEHDTVNf79g/AialJ3XZ+SHgNqa/OJXRR+fU+GV/l+gBhRPcyP8XkQlv8Avw==","repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.16.0","description":"Standalone Model Context Protocol client for pi and other applications","directories":{},"sideEffects":false,"_nodeVersion":"22.23.3","dependencies":{"cross-spawn":"7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"shx":"0.3.4","vitest":"4.1.11","@types/cross-spawn":"6.0.6"},"_npmOperationalInternal":{"tmp":"tmp/pi-mcp_1.3.0_1792091477822_0.9587084624231734","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"_id":"@earendil-works/pi-mcp@1.4.0","bugs":{"url":"https://github.com/earendil-works/pi/issues"},"dist":{"shasum":"c3ae7d264a29c0834b8eeee02d9ec817eec77779","tarball":"https://registry.npmjs.org/@earendil-works/pi-mcp/-/pi-mcp-1.4.0.tgz","fileCount":76,"integrity":"sha512-92aZmmGsUpHHknYuKXZHRINQfahntw5hU9If0I0ZM49GojOaFHpkl5/GF3/aatqpt7v7GjZbBfpfSygGKW+pnw==","signatures":[{"sig":"MEUCIGJTBLpiDBMY9hQ2KqGwrPFb5cGTdMTCkEE5O2svGO6dAiEAoR22d8KV69+koOgcPRcRk8Bt36KjsEEz1S1+Txv9iQo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBBDIKvwqTUG/B2Me+tJojTK7ZKLJDJZMkpgtjwFnqlsAiEA1sKw99KVa1jWxMBgHUfd+78PQ7SObzr4rBU5AzTMZGw="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fpi-mcp@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":394177},"main":"./dist/index.js","name":"@earendil-works/pi-mcp","type":"module","_from":"file:/tmp/pi-package-artifacts-e5Jxrf/tarballs/earendil-works-pi-mcp-1.4.0-f766999a61ac.tgz","types":"./dist/index.d.ts","author":{"name":"Earendil Works"},"engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","source":"./src/index.ts"},"./oauth":{"types":"./dist/oauth/index.d.ts","import":"./dist/oauth/index.js","source":"./src/oauth/index.ts"},"./testing":{"types":"./dist/testing/index.d.ts","import":"./dist/testing/index.js","source":"./src/testing/index.ts"}},"license":"MIT","scripts":{"test":"vitest --run","build":"tsc -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"version":"1.4.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"f490702b-168a-43b8-abc9-8ab9adf49e0b"}},"homepage":"https://github.com/earendil-works/pi#readme","keywords":["mcp","model-context-protocol","client"],"_resolved":"/tmp/pi-package-artifacts-e5Jxrf/tarballs/earendil-works-pi-mcp-1.4.0-f766999a61ac.tgz","_integrity":"sha512-92aZmmGsUpHHknYuKXZHRINQfahntw5hU9If0I0ZM49GojOaFHpkl5/GF3/aatqpt7v7GjZbBfpfSygGKW+pnw==","repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.16.0","description":"Standalone Model Context Protocol client for pi and other applications","directories":{},"maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"sideEffects":false,"_nodeVersion":"22.23.3","dependencies":{"cross-spawn":"7.0.6"},"_hasShrinkwrap":false,"devDependencies":{"shx":"0.3.4","vitest":"4.1.11","@types/cross-spawn":"6.0.6"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-mcp_1.4.0_1792622681800_0.2822261197770852"}}},"time":{"created":"2026-09-29T16:56:07.998Z","modified":"2026-10-21T22:44:42.325Z","0.0.1":"2026-09-29T16:56:08.321Z","0.99.0":"2026-09-29T17:17:32.007Z","0.99.1":"2026-09-29T18:18:59.640Z","0.99.2":"2026-09-30T19:24:14.649Z","1.0.0":"2026-10-01T19:11:04.416Z","1.0.1":"2026-10-03T12:30:25.790Z","1.0.2":"2026-10-04T00:52:12.798Z","1.0.3":"2026-10-05T08:33:09.922Z","1.0.4":"2026-10-05T21:46:11.682Z","1.1.0":"2026-10-07T22:14:39.812Z","1.2.0":"2026-10-12T23:00:29.361Z","1.3.0":"2026-10-15T19:11:17.908Z","1.4.0":"2026-10-21T22:44:41.955Z"},"bugs":{"url":"https://github.com/earendil-works/pi/issues"},"author":{"name":"Earendil Works"},"license":"MIT","homepage":"https://github.com/earendil-works/pi#readme","keywords":["mcp","model-context-protocol","client"],"repository":{"url":"git+https://github.com/earendil-works/pi.git","type":"git","directory":"packages/mcp"},"description":"Standalone Model Context Protocol client for pi and other applications","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"},{"name":"rwachtler","email":"r.wachtler@outlook.com"}],"readme":"# @earendil-works/pi-mcp\n\nA small, standalone Model Context Protocol client. It does not depend on the official MCP SDK or other pi packages.\n\nThe package provides a transport-neutral client core, stdio and Streamable HTTP transports, and an in-memory testing transport.\n\n## Usage\n\n```typescript\nimport { McpClient, StdioTransport } from \"@earendil-works/pi-mcp\";\n\nconst transport = new StdioTransport({\n\tcommand: \"npx\",\n\targs: [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/workspace\"],\n});\nconst client = new McpClient({\n\tname: \"my-client\",\n\tversion: \"1.0.0\",\n\troots: [{ uri: \"file:///workspace\", name: \"workspace\" }],\n});\n\nawait client.connect(transport);\nconst tools = await client.listTools();\nconst result = await client.callTool(\"search\", { query: \"MCP\" });\nawait client.close();\n```\n\nFor a remote server, use `new StreamableHttpTransport({ url, headers })`. Fetch can be injected for proxying or custom networking.\n\n### Tools for an LLM\n\n`toLlmContent(result)` converts a `CallToolResult` to text and image content for a model, in the shape of `@earendil-works/pi-ai`'s `TextContent` and `ImageContent`. Text and images pass through, embedded text and image resources are unwrapped, and audio, resource links, and binary resources become short text placeholders. A result without content blocks but with `structuredContent` becomes its JSON.\n\nWrapping an MCP tool as a `pi-agent-core` `AgentTool`:\n\n```typescript\nimport type { AgentTool } from \"@earendil-works/pi-agent-core\";\nimport { toLlmContent } from \"@earendil-works/pi-mcp\";\nimport { Type } from \"typebox\";\n\nconst tools: AgentTool[] = (await client.listTools()).map((tool) => ({\n\t// Providers allow at most 64 characters of [A-Za-z0-9_-].\n\tname: `mcp_${tool.name}`.replace(/[^A-Za-z0-9_-]/g, \"_\").slice(0, 64),\n\tlabel: tool.title ?? tool.name,\n\tdescription: tool.description ?? tool.name,\n\t// Providers require an object schema, and some reject one without `properties`.\n\tparameters: Type.Unsafe({ ...tool.inputSchema, type: \"object\", properties: tool.inputSchema.properties ?? {} }),\n\texecute: async (_toolCallId, params, signal) => {\n\t\tconst result = await client.callTool(tool.name, params as Record<string, unknown>, { signal });\n\t\t// MCP reports tool failures in the result instead of as a protocol error.\n\t\treturn { content: toLlmContent(result), details: undefined, isError: result.isError === true };\n\t},\n}));\n```\n\nThe [mcp-codemode example](https://github.com/earendil-works/pi/tree/main/packages/agent/examples/mcp-codemode) also forwards progress, passes `structuredContent` through, and lets `@earendil-works/pi-codemode` scripts call the tools.\n\n### OAuth\n\n`@earendil-works/pi-mcp/oauth` provides the MCP OAuth client subset without depending on the official SDK:\n\n```typescript\nimport { McpClient, StreamableHttpTransport } from \"@earendil-works/pi-mcp\";\nimport {\n\tadaptOAuthProvider,\n\tauthorizeMcp,\n\tMcpOAuthAuthorizationRequiredError,\n\tMcpOAuthProvider,\n\tOAuthCallbackServer,\n} from \"@earendil-works/pi-mcp/oauth\";\n\nconst serverUrl = \"https://mcp.example.com/mcp\";\nconst callback = await OAuthCallbackServer.listen();\nlet authorizationUrl: URL | undefined;\nconst oauth = new McpOAuthProvider({\n\tserverUrl,\n\tredirectUrl: callback.redirectUrl,\n\tclientMetadata: { client_name: \"My MCP client\" },\n\tonRedirect: (url) => {\n\t\tauthorizationUrl = url;\n\t},\n});\n\nconst connect = () => {\n\tconst client = new McpClient({ name: \"my-client\", version: \"1.0.0\" });\n\treturn {\n\t\tclient,\n\t\tconnected: client.connect(\n\t\t\tnew StreamableHttpTransport({ url: serverUrl, authProvider: adaptOAuthProvider(oauth) }),\n\t\t),\n\t};\n};\n\nconst first = connect();\ntry {\n\tawait first.connected;\n} catch (error) {\n\tif (!(error instanceof McpOAuthAuthorizationRequiredError)) throw error;\n\tconst state = await oauth.state();\n\tconst result = callback.waitForCallback(state);\n\t// Open authorizationUrl in the user's browser here.\n\tconst { code } = await result;\n\tawait authorizeMcp(oauth, { serverUrl, authorizationCode: code });\n}\n\nconst { client, connected } = connect();\nawait connected;\n```\n\nInject `McpOAuthStateStore` into `McpOAuthProvider` for durable credentials. The package does not open a browser or choose where credentials are stored.\n\nThe OAuth implementation is adapted from the MIT-licensed Model Context Protocol TypeScript SDK v1.29.0. Its license is included under `LICENSES/`.\n\nAn MCP transport owns framing and I/O. It delivers individual JSON-RPC messages to `McpClient`; the client owns request correlation, initialization, timeouts, cancellation, server requests, and protocol-level helpers.\n\n## Supported protocol surface\n\n- MCP protocol version `2025-11-25`, accepting servers that negotiate `2025-06-18`, `2025-03-26`, or `2024-11-05`\n- initialization and `notifications/initialized`\n- ping\n- paginated `tools/list`\n- `tools/call`, including structured content\n- progress notifications and timeout renewal\n- request cancellation\n- Streamable HTTP sessions, the server-to-client GET stream with reconnection, and resumption of dropped response streams with `Last-Event-ID`\n- stdio shutdown per the spec (close stdin, then SIGTERM, then SIGKILL), applied to the server's whole process group\n- server `ping` and `roots/list` requests\n- logging and tool-list-change notifications through the generic notification API\n- OAuth protected-resource and authorization-server discovery\n- PKCE authorization code flow, dynamic client registration, token refresh (one refresh shared by concurrent 401s), and step-up authorization for `insufficient_scope`\n\nBatch JSON-RPC messages, legacy HTTP+SSE, servers, sampling, and tasks are outside the initial core.\n\n## Testing\n\n`@earendil-works/pi-mcp/testing` exports `createInMemoryTransportPair()` for client and adapter tests.\n","readmeFilename":"README.md"}