{"_id":"@arcadeai/arcade-mcp","_rev":"21-62d554a55035da7e0fea52befeb7333a","name":"@arcadeai/arcade-mcp","dist-tags":{"latest":"0.18.3"},"versions":{"0.4.0":{"name":"@arcadeai/arcade-mcp","version":"0.4.0","license":"MIT","_id":"@arcadeai/arcade-mcp@0.4.0","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"dist":{"shasum":"3d04492cff9298c41149421aefa9699f0c7e3176","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.4.0.tgz","fileCount":130,"integrity":"sha512-NHXIOfHP3HL46Fh7YlZLx5k93oc+Eywk/XvDCSVsHs3t1WdTdOeq4rEdy9Wymlj5/+TDulDeVK+KwU44h6eQ5A==","signatures":[{"sig":"MEQCIGFQlVyKJpKVTtkUdo8SANqo1DNiWrSiaEZfsUAqnYhtAiByb/Kd4KzuoG1t0ngDRmESkLvIiaiUD4cpvLiTW6QApA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":268097},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"7165a905a0a85567eb47da091e32219c44b40eb9","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"evantahler","email":"evan@evantahler.com"},"_npmVersion":"11.8.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"24.13.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","elysia":"^1.2.0","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^17.3.1","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8"},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.4.0_1773872179856_0.8186009260159806","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@arcadeai/arcade-mcp","version":"0.4.1","license":"MIT","_id":"@arcadeai/arcade-mcp@0.4.1","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"dist":{"shasum":"a5a3d1fffc0688df34e365262549290d6b2898bc","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.4.1.tgz","fileCount":138,"integrity":"sha512-vaGhSIWomR1P5fX6AUjtsDXak2EvHtttrsudpdrb7zU4bBiBfA60uf1yRUQ3BG8abvpeY6OKS84yQgzPCAv4eQ==","signatures":[{"sig":"MEUCIQC6ub5QrNLg320cIb9aeHfOM8ibqfToWDdotjAud6AJigIgfjFrJWPNZTdUah1JSvelDJszFQSTR0i04GAntOZvXl4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":279940},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"a2c6b9467ee47d5702f5b1481815c1ccf9bdcbe4","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","elysia":"^1.2.0","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^17.3.1","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8"},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.4.1_1773872547229_0.9338768558997366","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@arcadeai/arcade-mcp","version":"0.5.0","license":"MIT","_id":"@arcadeai/arcade-mcp@0.5.0","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"dist":{"shasum":"b903baae4fc29dbc1dc9f65ecc149552e044f98c","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.5.0.tgz","fileCount":158,"integrity":"sha512-XE11KxnLdYpd5AnubvpGAcWJHzMDXhGVQ2cWY2w+cdjwCaHG2S0z7yeQWdBWkR5+DYHO4D3u9s6Yr3gSUi4gUw==","signatures":[{"sig":"MEUCIQCcEC+i5NyOrIwKlyICPKtbAnCZ3MfXJjWci/wdORsjdwIgK2B5Xe7a15Y0bl+4eEE5Xeguxfh/l05X4xfeYhKsumM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":328895},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"e5c1b50efbfdaa6a7e6198775dd07e52ec7bf048","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","elysia":"^1.2.0","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^17.3.1","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8"},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.5.0_1773872694859_0.9413802014126662","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@arcadeai/arcade-mcp","version":"0.6.0","license":"MIT","_id":"@arcadeai/arcade-mcp@0.6.0","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"dist":{"shasum":"3bcd5a34dc58e89b3850617aea0b401a6a84957b","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.6.0.tgz","fileCount":163,"integrity":"sha512-kooOfaMKQa6AUP5ToEamUOIxeYeSNi6GncmIlpO7vIWdocTg05Ozy/iJ1saxpJuJADRaZ8Qb8oWnWej13KgFYg==","signatures":[{"sig":"MEUCIGIAbBNsWllL/gZwASBSva2A1b/YNuWwC19BScjEgIgzAiEA5ciTMqrE7VIncPSimJapTr9t2g+tsqt0zxAlW8NFnEo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":362656},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"024ce048543b998b36a64b553f25661bd5964ab9","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","elysia":"^1.2.0","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^17.3.1","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8"},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.6.0_1773873234592_0.943282857409905","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@arcadeai/arcade-mcp","version":"0.7.0","license":"MIT","_id":"@arcadeai/arcade-mcp@0.7.0","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"bin":{"arcade-mcp":"dist/cli.js"},"dist":{"shasum":"689b7f97c39455aec9d4fa7b83ab29173345b8cb","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.7.0.tgz","fileCount":168,"integrity":"sha512-dftopWazEDUD7E6ngaG2pya/0rG0IUu/+23gJbykSHGGJnvYiNOCo8/zF3TA6iUGXxb4J8hIvAs3eVreYIlIxQ==","signatures":[{"sig":"MEQCIBIzQjguk9zKV59n8v30awnQ4ULIBcgdaJ8eF0mSU3/+AiAfFPfE9MfD4pyLk7a7VDZrlmCG6c3uwOGQ8LrIXVAV0w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":393673},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"9acf64e5b01dbf4b10af844c25627c72cea7f93e","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","elysia":"^1.2.0","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^17.3.1","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8"},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.7.0_1773873493350_0.5739939238314493","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@arcadeai/arcade-mcp","version":"0.7.1","license":"MIT","_id":"@arcadeai/arcade-mcp@0.7.1","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"bin":{"arcade-mcp":"dist/cli.js"},"dist":{"shasum":"607cfb454ecdf3df74693e51863e81204e9d233d","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.7.1.tgz","fileCount":168,"integrity":"sha512-XXNlyc5fz0fQmlEJ2fTNj6Ijw32FqqIJv5+7XHnE8l/2nKAB9oLs3AaWKFII1mc0CTjiwaPHpXpwix4KHfBGIg==","signatures":[{"sig":"MEUCIQC1h2BgTRTjv15C/PKodzsTec2nd+d2WO8siqmLOpZ+ZAIgQkaAM4fEJK2UBKWP1824npwlYUbe6GGrsmkJ2IOuPkE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":395443},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"cd49bc01b9cd306e28d266b078251e44e01358a1","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","elysia":"^1.2.0","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^17.3.1","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8"},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.7.1_1773874015914_0.532251413105588","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@arcadeai/arcade-mcp","version":"0.8.0","license":"MIT","_id":"@arcadeai/arcade-mcp@0.8.0","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"bin":{"arcade-mcp":"dist/cli.js"},"dist":{"shasum":"e8c86d980aa904e255e3c0619ef1dbdfb1e05110","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.8.0.tgz","fileCount":173,"integrity":"sha512-obaBX6sHal/eRREQbjXysnvNKKuLq8tIZrIArvRr+WEQaFX/BLNlBUiug2OKwj0Ngzw3Vf+GOeJ9T8f/9nJDHw==","signatures":[{"sig":"MEYCIQDX8wz52WX37rrWCU7QgD2Q5Ly0E1h+fW/JvzQOHp1ULgIhANzBeo82ntCuiLkftNiKbKRMBlTsyJBePQbfME5s0ZY3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":407448},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"3f9090eb48c0d35f46b042ccc54030952cab4865","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","elysia":"^1.2.0","pino-pretty":"^13.1.3","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^17.3.1","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8"},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.8.0_1773875385675_0.6962898779074571","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@arcadeai/arcade-mcp","version":"0.9.0","license":"MIT","_id":"@arcadeai/arcade-mcp@0.9.0","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"bin":{"arcade-mcp":"dist/cli.js"},"dist":{"shasum":"b07005b5c244549bb4fe1a6d933a0fea4fc0033b","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.9.0.tgz","fileCount":183,"integrity":"sha512-c3ldCNcz9mdRRU40nABoIQjduPnW7Uy5jre2J32yNIMaGURCz++KLeiFeS416hw/iweOIpb+VF9WD3H1hUFL1A==","signatures":[{"sig":"MEYCIQDzmaYlhAUcOz6GiuZZyZvHxkJKj0Yl5TvwolAJDZf+mwIhALJEGrrRhsE9TKxuxRWOmcGU9/5bEpsJeV7Z/75d/EgW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":445622},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"7990cd0c6d120529d23d8420fd893d699650ccae","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","elysia":"^1.2.0","pino-pretty":"^13.1.3","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^17.3.1","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8"},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.9.0_1773875826318_0.5955515879709268","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@arcadeai/arcade-mcp","version":"0.10.0","license":"MIT","_id":"@arcadeai/arcade-mcp@0.10.0","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"bin":{"arcade-mcp":"dist/cli.js"},"dist":{"shasum":"26dbf7489ed15fa25d9987416ecebddbde0b5731","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.10.0.tgz","fileCount":183,"integrity":"sha512-yJct5BN+58QLKRiXepwx8Gk9qkioFNngvV5q9BkE5tMj+AU6M9vbiLpcS3P7DOr1RVnpVUMZ368jKrkQJ1Eyiw==","signatures":[{"sig":"MEUCIQCwLGELwSKeQ06Bdd7D+lQg6HVuCyKReMEnuC6tggdFkwIgHRvnN88L0oa2iixv2WzuC4KbiiVi4i3ufOF+vFHrakU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":468817},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"ba444e9beb642bd0560e4278aa436f38f81e3be4","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","elysia":"^1.2.0","pino-pretty":"^13.1.3","@arcadeai/arcadejs":"^2.3.0","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^17.3.1","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8"},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.10.0_1773876602953_0.6679932565195328","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@arcadeai/arcade-mcp","version":"0.10.1","license":"MIT","_id":"@arcadeai/arcade-mcp@0.10.1","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"bin":{"arcade-mcp":"dist/cli.js"},"dist":{"shasum":"bc71a65faa6efefef0d178c4178d7fef6cacf1de","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.10.1.tgz","fileCount":183,"integrity":"sha512-F0CWE7+EnGwHzO/sXeMkid1Qe1AKJRwrkB09trwJKMWH0irAGzfJJa8F0gssnWG6aOnuaisnIrghfgsYgXnJNA==","signatures":[{"sig":"MEQCIFQdks90s9assyxHd2KyDJlOIVdAkQXAtM8PVqakNZ6yAiArNCascVHKHPbpMeiF0YNVcX6ogShCHwDGeX1yyNHUGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":468817},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"fac1904b5e8b423fcda4cba46deaa65e6b4ceb24","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","elysia":"^1.2.0","pino-pretty":"^13.1.3","@arcadeai/arcadejs":"^2.3.0","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^17.3.1","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8"},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.10.1_1773876840741_0.4069647216582164","host":"s3://npm-registry-packages-npm-production"}},"0.10.2":{"name":"@arcadeai/arcade-mcp","version":"0.10.2","license":"MIT","_id":"@arcadeai/arcade-mcp@0.10.2","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"bin":{"arcade-mcp":"dist/cli.js"},"dist":{"shasum":"3e7b7540fa4144f2f1664bf5604143272cea845a","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.10.2.tgz","fileCount":183,"integrity":"sha512-vL+b9k4UjAZ5ZZXpjzOJtJA9DLKxHTGdi3SbvDiJLjqR24i3jHuReYIDFef9ztx71fH5zaegQQ2/xc8k3ey+Cw==","signatures":[{"sig":"MEQCIGE5gnmOQoMmJDLlgT685+lXbeye0YzGhfwNEQIJDip8AiAB/VQIyQhyfHjF4zaMSZk6RWL4Un1jr5FPu/aQRj/8zg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.10.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":469135},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"7f0b4dbe761170ce3c479b2526b03bc0c3b00ef7","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","elysia":"^1.2.0","pino-pretty":"^13.1.3","@arcadeai/arcadejs":"^2.3.0","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"dotenv":"^17.3.1","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8"},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.10.2_1773891559161_0.9769525544291278","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"name":"@arcadeai/arcade-mcp","version":"0.16.1","license":"MIT","_id":"@arcadeai/arcade-mcp@0.16.1","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"bin":{"arcade-mcp":"dist/cli.js"},"dist":{"shasum":"04f72d1bc95e3e49282287e5ec6f1283bc56faf6","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.16.1.tgz","fileCount":273,"integrity":"sha512-3hdCh4Kg0nKuUzmV47IJDDZqYjDqEpNOrsfLYx98MU6qrc1xk0pewij30VBLJScYDp4N8tDAi752VE5kcpfSGQ==","signatures":[{"sig":"MEQCIB1LJe40xufhmA3wJli1MCHOttLDX2rs3jDwiN3A0mt8AiAE2TBeWMxGRZi7ePfHD/piV/rOhXURq92ZSkhBTuGbuw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.16.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":753652},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"34e4bd479727cb5f66e140a06d4785cf74659985","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","elysia":"^1.2.0","pino-pretty":"^13.1.3","posthog-node":"^5.28.4","@arcadeai/arcadejs":"^2.3.0","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.3.1","openai":"^4.96.0","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8","@anthropic-ai/sdk":"^0.39.0"},"peerDependencies":{"openai":">=4.0.0","@anthropic-ai/sdk":">=0.30.0"},"peerDependenciesMeta":{"openai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.16.1_1773978195575_0.05061535314252996","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@arcadeai/arcade-mcp","version":"0.17.0","license":"MIT","_id":"@arcadeai/arcade-mcp@0.17.0","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"bin":{"arcade-mcp":"dist/cli.js"},"dist":{"shasum":"9f64fd6bca433a0784b2dda1978da68438a0c917","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.17.0.tgz","fileCount":273,"integrity":"sha512-CSPUVCmSCt3qgWlXRlvohhAUZwjHK46NOlH8JIr7xXjVOL2bkLsAr/PZs6gfhpiB76C/9vtIsJzzoy9+jTh3xg==","signatures":[{"sig":"MEUCICl572wXO3DYV7Y7N/uPKgBptR050LouEsImWnoS8gxCAiEA9kq00cUASGtEBvYJJ5tC8AQwnNvkF173FLgFMzMzsCY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":774551},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"e1f66917b6d6cff2a1d7c1c818116f33733fd63e","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","yaml":"^2.8.2","elysia":"^1.2.0","pino-pretty":"^13.1.3","posthog-node":"^5.28.4","@arcadeai/arcadejs":"^2.3.0","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.3.1","openai":"^4.96.0","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8","@anthropic-ai/sdk":"^0.39.0"},"peerDependencies":{"openai":">=4.0.0","@anthropic-ai/sdk":">=0.30.0"},"peerDependenciesMeta":{"openai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.17.0_1773978934289_0.10360143367249064","host":"s3://npm-registry-packages-npm-production"}},"0.17.1":{"name":"@arcadeai/arcade-mcp","version":"0.17.1","license":"MIT","_id":"@arcadeai/arcade-mcp@0.17.1","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"bin":{"arcade-mcp":"dist/cli.js"},"dist":{"shasum":"e0bf4b93f9f1783995b7e60513689069a3dfd2ee","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.17.1.tgz","fileCount":273,"integrity":"sha512-UJ7XsMgjFFlk5thSyQi0qGMoS82bwp1CX7OkniB5UfjdVcx81JZ4g1/40/3dpWPMQ6gfN3jha0XzrfHAfN13CA==","signatures":[{"sig":"MEUCID2M9suzCP9NrrDsQdGjd4UL1VVtf7zgZ8fs7zP9gpaTAiEAro45m1p/qCxx/BO01W1ldPi8IbsqgKVbQKBlfgnqwG0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.17.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":774974},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f241f5f7338575813d6c24ffab718b94a4a66048","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","yaml":"^2.8.2","elysia":"^1.2.0","pino-pretty":"^13.1.3","posthog-node":"^5.28.4","@arcadeai/arcadejs":"^2.3.0","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.3.1","openai":"^4.96.0","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8","@anthropic-ai/sdk":"^0.39.0"},"peerDependencies":{"openai":">=4.0.0","@anthropic-ai/sdk":">=0.30.0"},"peerDependenciesMeta":{"openai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.17.1_1773979053593_0.010128521743814067","host":"s3://npm-registry-packages-npm-production"}},"0.17.2":{"name":"@arcadeai/arcade-mcp","version":"0.17.2","license":"MIT","_id":"@arcadeai/arcade-mcp@0.17.2","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"bin":{"arcade-mcp":"dist/cli.js"},"dist":{"shasum":"9022d44c3c4982b108ee89f17a677c6b69c4d2ab","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.17.2.tgz","fileCount":273,"integrity":"sha512-GqlJOmNReIstzygETXJTM+bYmFfNveePx2D9eRjqfhiZoqswHHhrsdY7jHhv8X9l/5F1SybUPS7o824fqUkixA==","signatures":[{"sig":"MEUCIAmO4ZWDl27n+v8UiaT4Awo7MaP5iSzkxzwhVqm10wcvAiEA9hDbl1gc8cbcXW7wEAiXI8l9b/JiZXWw+ODGqEnDB5w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.17.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":766908},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"56bbb2c32ac041363fbda7fa968d0441e76c1266","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","yaml":"^2.8.2","elysia":"^1.2.0","pino-pretty":"^13.1.3","posthog-node":"^5.28.4","@arcadeai/arcadejs":"^2.3.0","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.3.1","openai":"^4.96.0","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8","@anthropic-ai/sdk":"^0.39.0"},"peerDependencies":{"openai":">=4.0.0","@anthropic-ai/sdk":">=0.30.0"},"peerDependenciesMeta":{"openai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.17.2_1773980613798_0.7234882725684482","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@arcadeai/arcade-mcp","version":"0.18.0","license":"MIT","_id":"@arcadeai/arcade-mcp@0.18.0","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"bin":{"arcade-mcp":"dist/cli.js"},"dist":{"shasum":"aee1aeda7b4b5eb02be27019806bc69df0ffd5af","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.18.0.tgz","fileCount":288,"integrity":"sha512-5Q92oFi5nIDgIvXnsWh11cVWJ8LGsgHExzuM4ye/L0MOpoWZbqqIZhR11u1Yo9ayw+uEnNnFcSavR8CzJiHWlA==","signatures":[{"sig":"MEUCIAwBcIHcWA+x5c0intHCFdpDhGChEDCsq068ndYW1K02AiEArLNbbWkiw3LEV6odNpgAeVP6tnghN7AXOAfHzlboCZY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":760840},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"59156a55d0337071d7fb992fabad2fcfb3bf865f","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","yaml":"^2.8.2","elysia":"^1.2.0","pino-pretty":"^13.1.3","posthog-node":"^5.28.4","@arcadeai/arcadejs":"^2.3.0","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.3.1","openai":"^4.96.0","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8","@anthropic-ai/sdk":"^0.39.0"},"peerDependencies":{"openai":">=4.0.0","@anthropic-ai/sdk":">=0.30.0"},"peerDependenciesMeta":{"openai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.18.0_1773986084984_0.695598271793122","host":"s3://npm-registry-packages-npm-production"}},"0.18.1":{"name":"@arcadeai/arcade-mcp","version":"0.18.1","license":"MIT","_id":"@arcadeai/arcade-mcp@0.18.1","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"bin":{"arcade-mcp":"dist/cli.js"},"dist":{"shasum":"f453727fc32992dd4e5f7357d46d688743e889ce","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.18.1.tgz","fileCount":288,"integrity":"sha512-BYDfLU+0yOf/p5rHn1R9+2NjVPxzafWVqkkQzNjAJBHdk+wdk+ZjZDeh+tYCXbLu9pzJmEL/JQ40Wzc+59+/RA==","signatures":[{"sig":"MEYCIQCWT6LOH4zxKjluBg43s3+Wujq7bPwanBYpTi+kJhxLWgIhAPukZ5eBT5Trt623yyIsVVpU5QmrtntggsXSZ8o1f87t","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.18.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":765000},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"9d63031486fd30c703a814399ef3e93b4fb14c96","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","yaml":"^2.8.2","elysia":"^1.2.0","pino-pretty":"^13.1.3","posthog-node":"^5.28.4","@arcadeai/arcadejs":"^2.3.0","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.3.1","openai":"^4.96.0","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8","@anthropic-ai/sdk":"^0.39.0"},"peerDependencies":{"openai":">=4.0.0","@anthropic-ai/sdk":">=0.30.0"},"peerDependenciesMeta":{"openai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.18.1_1774022953885_0.48561653380647263","host":"s3://npm-registry-packages-npm-production"}},"0.18.2":{"name":"@arcadeai/arcade-mcp","version":"0.18.2","license":"MIT","_id":"@arcadeai/arcade-mcp@0.18.2","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"bin":{"arcade-mcp":"dist/cli.js"},"dist":{"shasum":"9b051705bba0a6ff8d23b2153b7f12c04e4b5269","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.18.2.tgz","fileCount":288,"integrity":"sha512-ioWBjVCAV99AWCbUoXOVOsMXx9T2QWCz7OzZ2uZq4kAP1VE9Tpgq4/r3mDtoMSQyYpCRqa3qcclGCQufUGJOig==","signatures":[{"sig":"MEYCIQDEc9WQ2qtpOThtf1atY2wFvK3dRBSRON+zzUL/TGp8XAIhAM33Bk7JvmSYZoAjfgxoyIJ2vxe6+cCyp/K5Krmn5KM4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.18.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":765368},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"e0baca654c91404a8b253be78ebbf89c94f286a1","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","yaml":"^2.8.2","elysia":"^1.2.0","pino-pretty":"^13.1.3","posthog-node":"^5.28.4","@arcadeai/arcadejs":"^2.3.0","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.3.1","openai":"^4.96.0","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8","@anthropic-ai/sdk":"^0.39.0"},"peerDependencies":{"openai":">=4.0.0","@anthropic-ai/sdk":">=0.30.0"},"peerDependenciesMeta":{"openai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.18.2_1774024197494_0.33717921765250725","host":"s3://npm-registry-packages-npm-production"}},"0.18.3":{"name":"@arcadeai/arcade-mcp","version":"0.18.3","license":"MIT","_id":"@arcadeai/arcade-mcp@0.18.3","maintainers":[{"name":"sdserrano","email":"sdserranog@gmail.com"},{"name":"evantahler","email":"evan@evantahler.com"},{"name":"spartee","email":"dev@arcade.dev"}],"homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"bin":{"arcade-mcp":"dist/cli.js"},"dist":{"shasum":"3ba7fe39d110bf10ecfd84b8f621c90c531f02ba","tarball":"https://registry.npmjs.org/@arcadeai/arcade-mcp/-/arcade-mcp-0.18.3.tgz","fileCount":288,"integrity":"sha512-WZuazFUi/dthONVcPfaCz27Zmu5kNt+o8D+/Yu21QsRw+KnRelZ6nvNdyXhOwFz/z3JhwKIcy2NErhaPElv9Mg==","signatures":[{"sig":"MEQCIGdb6K7pKujK8Lwn26lZYh8y4FUbvbr9nsFQ8NZEE9lnAiB076JJzXr+Yx2a5+z30F7Jx+A0z72cmu3O10heCiw2EA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arcadeai%2farcade-mcp@0.18.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":767133},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"fd22e61b9e9d3b304fab1504af2478d4a5b60a81","scripts":{"lint":"bunx biome check --write .","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","lint:check":"bunx biome check .","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:eb7214f7-9aa8-4c5b-8cb2-ccc3a59ad37f"}},"repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"_npmVersion":"11.12.0","description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","pino":"^10.3.1","yaml":"^2.8.2","elysia":"^1.2.0","pino-pretty":"^13.1.3","posthog-node":"^5.28.4","@arcadeai/arcadejs":"^2.3.0","@opentelemetry/api":"^1.9.0","@opentelemetry/sdk-logs":"^0.213.0","@opentelemetry/resources":"^2.6.0","@modelcontextprotocol/sdk":"^1.12.1","@opentelemetry/sdk-metrics":"^2.6.0","@opentelemetry/sdk-trace-base":"^2.6.0","@opentelemetry/semantic-conventions":"^1.40.0","@opentelemetry/exporter-logs-otlp-http":"^0.213.0","@opentelemetry/exporter-trace-otlp-http":"^0.213.0","@opentelemetry/exporter-metrics-otlp-http":"^0.213.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.3.1","openai":"^4.96.0","vitest":"^4.1.0","typescript":"^5.7.0","@types/node":"^25.5.0","@biomejs/biome":"^2.4.8","@anthropic-ai/sdk":"^0.39.0"},"peerDependencies":{"openai":">=4.0.0","@anthropic-ai/sdk":">=0.30.0"},"peerDependenciesMeta":{"openai":{"optional":true},"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/arcade-mcp_0.18.3_1774483261248_0.7095160443072865","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-03-18T22:16:19.856Z","modified":"2026-07-13T17:22:31.220Z","0.4.0":"2026-03-18T22:16:20.016Z","0.4.1":"2026-03-18T22:22:27.398Z","0.5.0":"2026-03-18T22:24:55.001Z","0.6.0":"2026-03-18T22:33:54.783Z","0.7.0":"2026-03-18T22:38:13.520Z","0.7.1":"2026-03-18T22:46:56.113Z","0.8.0":"2026-03-18T23:09:45.866Z","0.9.0":"2026-03-18T23:17:06.473Z","0.10.0":"2026-03-18T23:30:03.117Z","0.10.1":"2026-03-18T23:34:00.900Z","0.10.2":"2026-03-19T03:39:19.310Z","0.16.1":"2026-03-20T03:43:15.716Z","0.17.0":"2026-03-20T03:55:34.483Z","0.17.1":"2026-03-20T03:57:33.773Z","0.17.2":"2026-03-20T04:23:34.002Z","0.18.0":"2026-03-20T05:54:45.208Z","0.18.1":"2026-03-20T16:09:14.103Z","0.18.2":"2026-03-20T16:29:57.662Z","0.18.3":"2026-03-26T00:01:01.469Z"},"bugs":{"url":"https://github.com/ArcadeAI/arcade-mcp-ts/issues"},"license":"MIT","homepage":"https://github.com/ArcadeAI/arcade-mcp-ts#readme","repository":{"url":"git+https://github.com/ArcadeAI/arcade-mcp-ts.git","type":"git"},"description":"TypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware","maintainers":[{"email":"sdserranog@gmail.com","name":"sdserrano"},{"email":"evan@evantahler.com","name":"evantahler"}],"readme":"# @arcadeai/arcade-mcp\n\nTypeScript MCP framework with secret injection, OAuth auth providers, multi-user support, worker routes, and middleware. Wraps the official [`@modelcontextprotocol/sdk`](https://github.com/modelcontextprotocol/typescript-sdk) — never forks or patches it.\n\n## Quick Start\n\n```bash\nbun add @arcadeai/arcade-mcp\n```\n\n```typescript\nimport { MCPApp } from \"@arcadeai/arcade-mcp\";\nimport { z } from \"zod\";\n\nconst app = new MCPApp({\n  name: \"MyServer\",\n  version: \"1.0.0\",\n  instructions: \"A helpful tool server\",\n});\n\napp.tool(\n  \"greet\",\n  {\n    description: \"Greet someone by name\",\n    parameters: z.object({\n      name: z.string().describe(\"Name to greet\"),\n    }),\n  },\n  async (args) => `Hello, ${args.name}!`,\n);\n\napp.run(); // stdio by default\n```\n\nRun it:\n\n```bash\nbun run server.ts\n```\n\nOr over HTTP:\n\n```typescript\napp.run({ transport: \"http\", port: 8000 });\n```\n\n## CLI Auto-Discovery\n\nRun an MCP server without writing a server file. The CLI auto-discovers tool modules in the current directory:\n\n```bash\nnpx @arcadeai/arcade-mcp          # auto-discover tools, run stdio\nnpx @arcadeai/arcade-mcp --http   # auto-discover tools, run HTTP\n```\n\nTool modules are discovered from:\n- `*.tools.ts` / `*.tools.js` files (e.g., `math.tools.ts`)\n- Any file inside a `tools/` directory (e.g., `tools/greet.ts`)\n\nEach file should export tool definitions:\n\n```typescript\n// tools/greet.ts\nimport { z } from \"zod\";\n\nexport const greetTools = {\n  greet: {\n    options: {\n      description: \"Greet someone\",\n      parameters: z.object({ name: z.string() }),\n    },\n    handler: async (args) => `Hello, ${args.name}!`,\n  },\n};\n```\n\nCLI options:\n\n| Flag | Default | Description |\n|---|---|---|\n| `--http` | — | Use HTTP transport (default: stdio) |\n| `--host <addr>` | `127.0.0.1` | HTTP host |\n| `--port <n>` | `8000` | HTTP port |\n| `--name <name>` | directory name | App name |\n| `--dir <path>` | cwd | Directory to scan |\n| `--dev` | — | Auto-reload on file changes (HTTP only) |\n\n> **Node.js + TypeScript**: Use `npx tsx arcade-mcp` or Bun to import `.ts` tool files directly.\n\n### Dev Mode (Auto-Reload)\n\nWatch source files and automatically restart the server on changes:\n\n```bash\nnpx @arcadeai/arcade-mcp --http --dev\n```\n\nOr programmatically:\n\n```typescript\napp.run({ transport: \"http\", dev: true });\n```\n\nWhen a `.ts`, `.js`, `.mts`, or `.mjs` file changes, the server stops, re-imports tool modules with fresh copies, and restarts. Files in `node_modules/`, `dist/`, and hidden directories are ignored.\n\n> **Note**: Dev mode only works with HTTP transport. Stdio sessions cannot be restarted.\n\nYou can also enable dev mode via the `ARCADE_SERVER_RELOAD=1` environment variable.\n\n## Features\n\n- **Builder API** — `app.tool(name, options, handler)` with method chaining\n- **Secret injection** — env vars auto-captured and injected into tool context\n- **OAuth auth providers** — 21 providers: GitHub, Google, Slack, Microsoft, Linear, Notion, etc.\n- **Context object** — namespaced facades for logging, progress, sampling, resources, tools, UI\n- **Middleware** — composable onion-model middleware with method-specific hooks\n- **Multi-user HTTP auth** — JWT Bearer token validation via JWKS\n- **Worker routes** — `/worker/tools`, `/worker/tools/invoke`, `/worker/health`\n- **Error hierarchy** — structured errors with retry support, upstream error mapping\n- **Prompts** — `app.prompt(name, options, handler)` with argument validation and runtime management\n- **Resources** — `app.resource(uri, options, handler)` with MIME types and runtime management\n- **Dev mode** — auto-reload on file changes with `--dev` flag (HTTP only)\n- **Resumable streams** — optional event store for HTTP stream resumability via `Last-Event-ID`\n- **Evals** — evaluate LLM tool-calling accuracy with critics, rubrics, and Hungarian-optimal matching\n- **Dual transport** — stdio and HTTP (Elysia + StreamableHTTP)\n- **Runtime compatible** — Bun and Node.js (no `Bun.*` APIs in library code)\n\n## Tool Options\n\n### Basic Tool\n\n```typescript\napp.tool(\n  \"echo\",\n  {\n    description: \"Echo a message\",\n    parameters: z.object({\n      message: z.string(),\n    }),\n  },\n  async (args) => args.message,\n);\n```\n\n### Tool with OAuth\n\n```typescript\nimport { auth } from \"@arcadeai/arcade-mcp\";\n\napp.tool(\n  \"star_repo\",\n  {\n    description: \"Star a GitHub repository\",\n    parameters: z.object({\n      owner: z.string(),\n      repo: z.string(),\n    }),\n    auth: auth.GitHub({ scopes: [\"repo\"] }),\n  },\n  async (args, context) => {\n    const token = context.getAuthToken();\n    // ... use token to call GitHub API\n    return { starred: true };\n  },\n);\n```\n\n### Tool with Secrets\n\n```typescript\napp.tool(\n  \"get_repo\",\n  {\n    description: \"Get repo info\",\n    parameters: z.object({ repo: z.string() }),\n    secrets: [\"GITHUB_TOKEN\"],\n  },\n  async (args, context) => {\n    const token = context.getSecret(\"GITHUB_TOKEN\");\n    // ... use token\n  },\n);\n```\n\nAny env var not prefixed with `MCP_` or `_` is available as a tool secret.\n\n### Tool with Behavior Hints\n\nAnnotate tools with behavioral hints that map to MCP `ToolAnnotations`:\n\n```typescript\napp.tool(\n  \"delete_file\",\n  {\n    description: \"Delete a file from the workspace\",\n    parameters: z.object({ path: z.string() }),\n    behavior: {\n      readOnly: false,\n      destructive: true,\n      idempotent: true,\n      openWorld: false,\n    },\n  },\n  async (args) => {\n    // ...\n  },\n);\n```\n\nThese hints are exposed as `readOnlyHint`, `destructiveHint`, `idempotentHint`, and `openWorldHint` in the MCP tool listing.\n\n### Deprecated Tools\n\nMark tools as deprecated — the message is prepended to the description:\n\n```typescript\napp.tool(\n  \"old_search\",\n  {\n    description: \"Search for items\",\n    parameters: z.object({ query: z.string() }),\n    deprecationMessage: \"Use search_v2 instead\",\n  },\n  async (args) => {\n    // ...\n  },\n);\n// Description seen by clients: \"[DEPRECATED: Use search_v2 instead] Search for items\"\n```\n\n### Tool Title\n\nProvide a human-readable display name:\n\n```typescript\napp.tool(\n  \"gh_star\",\n  {\n    description: \"Star a GitHub repository\",\n    parameters: z.object({ repo: z.string() }),\n    title: \"Star Repository\",\n  },\n  async (args) => {\n    // ...\n  },\n);\n```\n\n### Toolkit Versioning\n\nThe app's `name`, `version`, and `title` are automatically attached to every tool as toolkit metadata. You can also override toolkit info per-tool:\n\n```typescript\napp.tool(\n  \"myTool\",\n  {\n    description: \"A tool with custom toolkit info\",\n    parameters: z.object({}),\n    toolkit: { name: \"my-toolkit\", version: \"1.2.0\" },\n  },\n  async () => {},\n);\n```\n\nVersions are normalized to semver — `\"1\"` becomes `\"1.0.0\"`, `\"v1.2\"` becomes `\"1.2.0\"`.\n\n## Prompts\n\nRegister prompts with `app.prompt(name, options, handler?)`:\n\n```typescript\napp.prompt(\n  \"greeting\",\n  {\n    description: \"Generate a greeting\",\n    arguments: [{ name: \"name\", description: \"Name to greet\", required: true }],\n  },\n  (args) => ({\n    messages: [\n      {\n        role: \"user\",\n        content: { type: \"text\", text: `Please greet ${args.name} warmly.` },\n      },\n    ],\n  }),\n);\n```\n\nOptions: `description?` and `arguments?` (array of `{ name, description?, required? }`). If no handler is provided, a default handler returns the description as a user message.\n\nRuntime management (after `app.run()`):\n\n```typescript\napp.prompts.add(\"new-prompt\", { description: \"Added at runtime\" }, handler);\napp.prompts.remove(\"new-prompt\");\napp.prompts.list(); // returns registered prompt names\n```\n\n## Resources\n\nRegister resources with `app.resource(uri, options, handler?)`:\n\n```typescript\napp.resource(\n  \"config://app\",\n  { description: \"Application configuration\", mimeType: \"application/json\" },\n  (uri) => ({\n    contents: [\n      {\n        uri: uri.href,\n        mimeType: \"application/json\",\n        text: JSON.stringify({ name: \"EchoServer\", version: \"1.0.0\" }),\n      },\n    ],\n  }),\n);\n```\n\nOptions: `description?` and `mimeType?`. If no handler is provided, a default handler returns empty text content.\n\nRuntime management (after `app.run()`):\n\n```typescript\napp.resources.add(\"data://users\", { mimeType: \"application/json\" }, handler);\napp.resources.remove(\"data://users\");\napp.resources.list(); // returns registered resource URIs\n```\n\n## Auth Providers\n\nFactory functions for 21 OAuth2 providers:\n\n```typescript\nimport { auth } from \"@arcadeai/arcade-mcp\";\n\nauth.GitHub({ scopes: [\"repo\"] })\nauth.Google({ scopes: [\"https://www.googleapis.com/auth/calendar\"] })\nauth.Slack({ scopes: [\"chat:write\"], id: \"my-slack\" })\nauth.Microsoft()\nauth.Linear()\nauth.Notion()\n// ... Asana, Atlassian, Attio, ClickUp, Discord, Dropbox,\n//     Figma, Hubspot, LinkedIn, PagerDuty, Reddit, Spotify,\n//     Twitch, X, Zoom\n```\n\n## Arcade Cloud Auth (Local Development)\n\nTools with `auth` requirements automatically resolve OAuth tokens through [Arcade Cloud](https://arcade.dev). There are two ways to set up credentials:\n\n### Option 1: Arcade CLI (recommended)\n\nInstall the Arcade CLI and sign in. This stores credentials in `~/.arcade/credentials.yaml` which the framework reads automatically:\n\n```bash\npip install arcade-ai\narcade login\n```\n\nThat's it — no environment variables needed. Run your server and tools will authenticate through your Arcade account:\n\n```bash\nbun run examples/github-tools/server.ts\n```\n\n### Option 2: Environment variables\n\nSet `ARCADE_API_KEY` and `ARCADE_USER_ID` directly:\n\n```bash\nexport ARCADE_API_KEY=\"your-arcade-api-key\"\nexport ARCADE_USER_ID=\"your-user-id\"\n```\n\nEnvironment variables take priority over the credentials file.\n\n### How it works\n\nWhen a tool with `auth` is called, the framework calls Arcade Cloud's authorization API:\n\n1. **First call** — returns an authorization URL. Visit the URL in your browser to complete the OAuth flow.\n2. **Retry the tool** — the token is now available and injected into `context.getAuthToken()`.\n\nThis is automatic — no code changes needed. The same tools work both locally (via Arcade Cloud auth) and deployed (via worker routes where Arcade Cloud injects tokens directly).\n\nSet `ARCADE_AUTH_DISABLED=true` to skip auth resolution (useful for testing with mock tokens).\n\n## Context\n\nTool handlers receive `(args, context)`. The context provides namespaced facades:\n\n```typescript\napp.tool(\"example\", opts, async (args, context) => {\n  // Secrets & auth\n  context.getSecret(\"API_KEY\");\n  context.getAuthToken();\n  context.getAuthTokenOrEmpty();\n\n  // Logging\n  context.log.info(\"Processing request\");\n  context.log.debug(\"Details\", { extra: \"data\" });\n  context.log.warning(\"Watch out\");\n  context.log.error(\"Something failed\");\n\n  // Progress\n  await context.progress.report(50, 100, \"Halfway done\");\n\n  // Notifications (deduplicated, flushed at end of request)\n  await context.notifications.tools.listChanged();\n  await context.notifications.resources.listChanged();\n  await context.notifications.prompts.listChanged();\n\n  // Metadata\n  context.signal;      // AbortSignal\n  context.sessionId;   // string | undefined\n  context.requestId;   // string\n  context.userId;      // string | undefined\n});\n```\n\n## Middleware\n\nComposable middleware with an onion model. Override any hook:\n\n```typescript\nimport { Middleware, composeMiddleware } from \"@arcadeai/arcade-mcp\";\n\nclass RateLimitMiddleware extends Middleware {\n  async onCallTool(context, next) {\n    // before\n    const result = await next(context);\n    // after\n    return result;\n  }\n}\n\nconst app = new MCPApp({\n  name: \"MyServer\",\n  version: \"1.0.0\",\n  middleware: composeMiddleware(\n    new RateLimitMiddleware(),\n  ),\n});\n```\n\nAvailable hooks: `onMessage`, `onRequest`, `onCallTool`, `onListTools`, `onReadResource`, `onListResources`, `onListResourceTemplates`, `onGetPrompt`, `onListPrompts`.\n\nBuilt-in middleware (enabled by default):\n\n- **ErrorHandlingMiddleware** — catches errors, returns structured MCP error responses\n- **LoggingMiddleware** — logs request/response timing (auto-detects TTY for pretty output; override with `MCP_LOG_FORMAT=json|pretty`)\n\n## Multi-User HTTP Auth\n\nValidate JWT Bearer tokens against JWKS endpoints:\n\n```typescript\nimport { MCPApp, JWTResourceServerValidator } from \"@arcadeai/arcade-mcp\";\n\nconst app = new MCPApp({\n  name: \"MyServer\",\n  version: \"1.0.0\",\n  auth: new JWTResourceServerValidator({\n    canonicalUrl: \"https://mcp.example.com/mcp\",\n    authorizationServers: [{\n      authorizationServerUrl: \"https://auth.example.com\",\n      issuer: \"https://auth.example.com\",\n      jwksUri: \"https://auth.example.com/.well-known/jwks.json\",\n      algorithm: \"RS256\",\n      expectedAudiences: [\"my-client-id\"],\n    }],\n  }),\n});\n\napp.run({ transport: \"http\", port: 8000 });\n```\n\nSupports RFC 9728 OAuth Protected Resource Metadata discovery. When `canonicalUrl` has a non-root path (e.g. `https://example.com/mcp`), both `/.well-known/oauth-protected-resource` and `/.well-known/oauth-protected-resource/mcp` are registered for backward compatibility. Responses include CORS headers.\n\n## Resumable Streams\n\nEnable HTTP stream resumability so disconnected clients can resume from where they left off using the `Last-Event-ID` header:\n\n```typescript\nimport { MCPApp, InMemoryEventStore } from \"@arcadeai/arcade-mcp\";\n\nconst app = new MCPApp({ name: \"MyServer\", version: \"1.0.0\" });\n\napp.run({\n  transport: \"http\",\n  eventStore: new InMemoryEventStore(),\n});\n```\n\nThe `InMemoryEventStore` is suitable for single-process deployments. For distributed systems, implement the `EventStore` interface with a persistent backend:\n\n```typescript\nimport type { EventStore, EventId, StreamId } from \"@arcadeai/arcade-mcp\";\nimport type { JSONRPCMessage } from \"@modelcontextprotocol/sdk/types.js\";\n\nclass RedisEventStore implements EventStore {\n  async storeEvent(streamId: StreamId, message: JSONRPCMessage): Promise<EventId> {\n    // Store in Redis...\n  }\n  async replayEventsAfter(\n    lastEventId: EventId,\n    { send }: { send: (eventId: EventId, message: JSONRPCMessage) => Promise<void> },\n  ): Promise<StreamId> {\n    // Replay from Redis...\n  }\n}\n```\n\n## Session Management\n\nThe HTTP transport uses an `HTTPSessionManager` that supports stateful (default) and stateless modes, TTL-based session eviction, and max session caps:\n\n```typescript\napp.run({\n  transport: \"http\",\n  stateless: false,       // true = fresh transport per request, no session reuse\n  sessionTtlMs: 300_000,  // evict idle sessions after 5 minutes\n  maxSessions: 100,       // reject new sessions with 503 when at capacity\n});\n```\n\nIn **stateful mode** (default), sessions are reused via the `mcp-session-id` header. Invalid session IDs receive a 400 response.\n\nIn **stateless mode**, every request gets a fresh transport and server — no sessions are tracked.\n\nYou can also use `HTTPSessionManager` directly for more control:\n\n```typescript\nimport { HTTPSessionManager } from \"@arcadeai/arcade-mcp\";\n\nconst manager = new HTTPSessionManager({\n  server: arcadeMcpServer,\n  sessionTtlMs: 60_000,\n  maxSessions: 50,\n});\n\n// In your HTTP handler:\nconst response = await manager.handleRequest(request, { authInfo });\n\n// Graceful shutdown:\nawait manager.close();\n```\n\nEach stateful HTTP session is backed by a `ServerSession` that adds:\n\n- **Initialization state tracking** — `NOT_INITIALIZED → INITIALIZING → INITIALIZED`\n- **Server-initiated requests** — `createMessage()`, `elicitInput()`, `listRoots()` with timeout and error handling\n- **Session-scoped data** — key/value storage per session via `getData()` / `setData()`\n- **Notification broadcasting** — `NotificationManager` sends tool/resource/prompt list-changed notifications to all or selected sessions\n\nThe `Context` facades `context.sampling.createMessage()` and `context.ui.elicit()` automatically delegate to the `ServerSession` when available.\n\n## Worker Routes\n\nWhen `ARCADE_WORKER_SECRET` is set, expose tool execution endpoints for Arcade Cloud integration:\n\n```typescript\nimport { createWorkerRoutes } from \"@arcadeai/arcade-mcp\";\n\nconst workerApp = createWorkerRoutes({\n  catalog: app.catalog,\n  secret: process.env.ARCADE_WORKER_SECRET,\n});\n```\n\n| Endpoint | Method | Auth | Description |\n|---|---|---|---|\n| `/worker/tools` | GET | Bearer | List available tools (bare array) |\n| `/worker/tools/invoke` | POST | Bearer | Execute a tool |\n| `/worker/health` | GET | None | Health check |\n\nThe worker wire format matches the Python `arcade-mcp` framework exactly:\n\n- **`GET /worker/tools`** returns a bare JSON array of tool definitions (not wrapped in `{ tools: [...] }`), using `input.parameters` with `value_schema` (not JSON Schema `inputSchema`), `fully_qualified_name`, `requirements`, and `output` fields.\n- **`POST /worker/tools/invoke`** accepts `{ tool: { name, toolkit, version }, inputs, context: { user_id, authorization, secrets, metadata }, run_id, execution_id, created_at }`.\n- **Responses** use `snake_case` field names (`execution_id`, `finished_at`) and structured `output: { value, error: { message, kind, can_retry, ... }, requires_authorization }`.\n- **Tool name separator** defaults to `.` (e.g., `MyToolkit.echo`), configurable via `ARCADE_TOOL_NAME_SEPARATOR`.\n\n## Error Handling\n\nStructured error hierarchy for tool execution:\n\n```typescript\nimport {\n  RetryableToolError,\n  FatalToolError,\n  UpstreamError,\n  ContextRequiredToolError,\n} from \"@arcadeai/arcade-mcp\";\n\n// Retryable error (LLM will retry)\nthrow new RetryableToolError(\"Rate limited, try again\", {\n  retryAfterMs: 5000,\n  additionalPromptContent: \"Wait a moment before retrying\",\n});\n\n// Fatal error (no retry)\nthrow new FatalToolError(\"API key is invalid\");\n\n// Upstream service error (auto-maps status codes)\nthrow new UpstreamError(\"GitHub API failed\", { statusCode: 503 });\n\n// Needs more context from the user\nthrow new ContextRequiredToolError(\"Missing info\", {\n  additionalPromptContent: \"Please specify the repository owner\",\n});\n```\n\n## Telemetry (OpenTelemetry)\n\nBuilt-in OpenTelemetry support for traces and metrics, exported via OTLP HTTP.\n\nEnable with an environment variable:\n\n```bash\nARCADE_MCP_OTEL_ENABLE=true \\\nOTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 \\\nbun run server.ts\n```\n\nWhen enabled, the framework automatically:\n\n- Creates `RunTool` spans around every MCP tool execution (with `tool_name`, `toolkit_name`, `environment` attributes)\n- Creates `CallTool` and `Catalog` spans in worker routes\n- Increments a `tool_call` counter metric per tool invocation\n- Exports traces and metrics via OTLP HTTP to the configured endpoint\n\nOTLP endpoint, headers, and protocol are configured via standard `OTEL_EXPORTER_OTLP_*` env vars.\n\n| Variable | Default | Description |\n|---|---|---|\n| `ARCADE_MCP_OTEL_ENABLE` | `false` | Enable OpenTelemetry |\n| `OTEL_SERVICE_NAME` | `arcade-mcp-worker` | Service name in traces |\n| `OTEL_EXPORTER_OTLP_ENDPOINT` | — | OTLP collector endpoint |\n| `ARCADE_ENVIRONMENT` | `dev` | Deployment environment name |\n\nYou can also use the `OTELHandler` directly for custom integration:\n\n```typescript\nimport { OTELHandler } from \"@arcadeai/arcade-mcp\";\n\nconst telemetry = new OTELHandler({\n  enable: true,\n  serviceName: \"my-service\",\n  environment: \"production\",\n});\ntelemetry.initialize();\n// ... use telemetry.getTracer(), telemetry.getMeter()\nawait telemetry.shutdown();\n```\n\n## Evals\n\nEvaluate how well LLMs use your tools. Define expected tool calls and score the results with critics.\n\n```typescript\nimport { EvalSuite, BinaryCritic, NumericCritic, SimilarityCritic } from \"@arcadeai/arcade-mcp\";\n```\n\n### Basic Eval\n\n```typescript\nconst suite = new EvalSuite({\n  name: \"My Tool Eval\",\n  systemMessage: \"You are a helpful assistant.\",\n  rubric: { failThreshold: 0.85, warnThreshold: 0.95 },\n});\n\n// Register tools (MCP-style definitions)\nsuite.addToolDefinitions([\n  {\n    name: \"greet\",\n    description: \"Greet someone by name\",\n    inputSchema: {\n      type: \"object\",\n      properties: { name: { type: \"string\" } },\n      required: [\"name\"],\n    },\n  },\n]);\n\n// Add test cases\nsuite.addCase({\n  name: \"Greet Alice\",\n  userMessage: \"Say hello to Alice\",\n  expectedToolCalls: [{ toolName: \"greet\", args: { name: \"Alice\" } }],\n  critics: [new BinaryCritic({ field: \"name\" })],\n});\n\n// Run against an LLM\nimport Anthropic from \"@anthropic-ai/sdk\";\n\nconst results = await suite.run({\n  client: new Anthropic(),\n  model: \"claude-sonnet-4-20250514\",\n  provider: \"anthropic\",\n});\n\nfor (const c of results.cases) {\n  console.log(`${c.evaluation.passed ? \"PASS\" : \"FAIL\"} ${c.name} (${c.evaluation.score})`);\n}\n```\n\nOpenAI works too — pass an `OpenAI` client and the provider is auto-detected.\n\n### Using a ToolCatalog\n\nIf you already have tools registered in an `MCPApp` or `ToolCatalog`, add them directly:\n\n```typescript\nsuite.addFromCatalog(app.catalog);\n```\n\n### Critics\n\nCritics score individual arguments of a tool call:\n\n| Critic | Use case | Key options |\n|---|---|---|\n| `BinaryCritic` | Exact equality (with type coercion) | `field`, `weight?` |\n| `NumericCritic` | Fuzzy numeric range matching | `field`, `valueRange`, `matchThreshold?`, `weight?` |\n| `SimilarityCritic` | Word-frequency cosine similarity | `field`, `similarityThreshold?`, `weight?` |\n\n```typescript\n// Exact match\nnew BinaryCritic({ field: \"city\" })\n\n// Numeric within range [1, 7], match if similarity >= 0.9\nnew NumericCritic({ field: \"days\", valueRange: [1, 7], matchThreshold: 0.9 })\n\n// String similarity >= 0.75\nnew SimilarityCritic({ field: \"description\", similarityThreshold: 0.75 })\n```\n\n### Rubric\n\nThe `EvalRubric` controls pass/fail/warning thresholds:\n\n| Option | Default | Description |\n|---|---|---|\n| `failThreshold` | `0.8` | Minimum score to pass |\n| `warnThreshold` | `0.9` | Score below this triggers a warning |\n| `failOnToolSelection` | `true` | Immediately fail if wrong tool is called |\n| `failOnToolCallQuantity` | `true` | Immediately fail if wrong number of calls |\n| `toolSelectionWeight` | `1.0` | Weight for tool name matching |\n\n### Running Evals\n\n```bash\n# With Anthropic\nANTHROPIC_API_KEY=sk-ant-... bun run examples/evals/echo-eval.ts\n\n# With OpenAI\nOPENAI_API_KEY=sk-... bun run examples/evals/echo-eval.ts\n```\n\nSee `examples/evals/` for complete examples.\n\n## Examples\n\nThe `examples/` directory contains runnable servers demonstrating different features. Run any example with:\n\n```bash\nbun run examples/echo/server.ts\n```\n\n## Configuration\n\nAll settings load from environment variables:\n\n| Variable | Default | Description |\n|---|---|---|\n| `MCP_SERVER_NAME` | `ArcadeMCP` | Server name |\n| `MCP_SERVER_VERSION` | `0.1.0` | Server version |\n| `MCP_SERVER_INSTRUCTIONS` | — | Server instructions |\n| `MCP_MIDDLEWARE_ENABLE_LOGGING` | `true` | Enable logging middleware |\n| `MCP_MIDDLEWARE_LOG_LEVEL` | `INFO` | Log level |\n| `MCP_LOG_FORMAT` | auto | Log format: `json` (structured), `pretty` (colored, human-readable), or auto (pretty in TTY, JSON otherwise) |\n| `MCP_MIDDLEWARE_MASK_ERROR_DETAILS` | `false` | Hide error details from clients |\n| `ARCADE_MCP_OTEL_ENABLE` | `false` | Enable OpenTelemetry telemetry |\n| `OTEL_SERVICE_NAME` | `arcade-mcp-worker` | OTEL service name |\n| `ARCADE_WORKER_SECRET` | — | Bearer token for worker routes |\n| `ARCADE_API_KEY` | — | Arcade API key |\n| `ARCADE_API_URL` | `https://api.arcade.dev` | Arcade API URL |\n| `ARCADE_USER_ID` | — | Default user ID |\n| `ARCADE_TOOL_NAME_SEPARATOR` | `.` | Separator between toolkit and tool name in FQN |\n\nSee [`.env.example`](.env.example) for the full list.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}