{"_id":"@ackuity/inline-proxy","_rev":"13-3103a8d04cf3be06662da51e0793a9b1","name":"@ackuity/inline-proxy","dist-tags":{"latest":"0.8.6"},"versions":{"0.7.0":{"name":"@ackuity/inline-proxy","version":"0.7.0","license":"MIT","_id":"@ackuity/inline-proxy@0.7.0","maintainers":[{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},{"name":"rajeshradhakrishnan135","email":"rajesh.radhakrishnan@ackuity.ai"}],"bin":{"ackuity-mcp-proxy":"dist/main.js"},"dist":{"shasum":"59bb24d72874be7391cb4676f1da35e160e1fe11","tarball":"https://registry.npmjs.org/@ackuity/inline-proxy/-/inline-proxy-0.7.0.tgz","fileCount":8,"integrity":"sha512-ypj93inW3xZSVoPnyr/qBVna5GP2n4YM6CQ6/Jjszt9qDjCKPwgYPrx+ISMI+7Fkxoe5TCBV2Mvrh4WH3D3v/A==","signatures":[{"sig":"MEYCIQDTYOO2LPxrEhORVgYHZGb2K1tou3pGgNxHkDhqMy0V9QIhAPGUJw6Pu4K6Z8LicLCeotdLuSMxxzt/Byv4hWTCpKaq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21490},"main":"dist/main.js","type":"module","gitHead":"325c059f132eaca93f479bdfdd50014013ffb3c3","scripts":{"lint":"npx biome check src/","build":"tsc && npx biome check src/","start":"node dist/main.js","prepare":"tsc","lint:fix":"npx biome check --write src/"},"_npmUser":{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},"_npmVersion":"10.8.2","description":"A transparent MCP proxy that intercepts tool calls and evaluates them against the [Ackuity Inline Decision Engine](https://ackuity.ai) before they reach the MCP server. Destructive operations (DELETE, DROP, TRUNCATE) are blocked in real time.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@biomejs/biome":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/inline-proxy_0.7.0_1775073503070_0.289061545115068","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@ackuity/inline-proxy","version":"0.7.1","license":"MIT","_id":"@ackuity/inline-proxy@0.7.1","maintainers":[{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},{"name":"rajeshradhakrishnan135","email":"rajesh.radhakrishnan@ackuity.ai"}],"bin":{"ackuity-mcp-proxy":"dist/main.js"},"dist":{"shasum":"6bce287a66d72d46ebfaf6968956c0350ff13528","tarball":"https://registry.npmjs.org/@ackuity/inline-proxy/-/inline-proxy-0.7.1.tgz","fileCount":8,"integrity":"sha512-au0icnwPaA/BA6BHcHVaeQvh2ZitAhGrv0TCCb+pL/pLchPAefsWoQynqCJlD8ddOxpGBymyjpCq3y/DCzsLaQ==","signatures":[{"sig":"MEUCIGJTpisb1rA3j4Yr5NSpehXFekJ/iuksYBljGTsy3BmLAiEAvvzN0o37lLNQBmJmJzWJyJSZJxeQk9R/+G+j0spniPE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21709},"main":"dist/main.js","type":"module","gitHead":"de2dc27b89574e9f544b8adbea494b4a86ee4eaa","scripts":{"lint":"npx biome check src/","build":"tsc && npx biome check src/","start":"node dist/main.js","prepare":"tsc","lint:fix":"npx biome check --write src/"},"_npmUser":{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},"_npmVersion":"10.8.2","description":"A transparent MCP proxy that intercepts tool calls and evaluates them against the [Ackuity Inline Decision Engine](https://ackuity.ai) before they reach the MCP server. Destructive operations (DELETE, DROP, TRUNCATE) are blocked in real time.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@biomejs/biome":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/inline-proxy_0.7.1_1775075346166_0.5657870448994053","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@ackuity/inline-proxy","version":"0.7.2","license":"MIT","_id":"@ackuity/inline-proxy@0.7.2","maintainers":[{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},{"name":"rajeshradhakrishnan135","email":"rajesh.radhakrishnan@ackuity.ai"}],"bin":{"inline-proxy":"dist/main.js"},"dist":{"shasum":"ec1941d6a0a50f07a92015300c1900fde4c0d8ee","tarball":"https://registry.npmjs.org/@ackuity/inline-proxy/-/inline-proxy-0.7.2.tgz","fileCount":8,"integrity":"sha512-XA8tu63J7uhYHuKZf2EEUW3fkNIVp/R7FggXutGFEwuzoo423zJOCNlixhxezJAxP59hAbNIKKL6Vj4bqFNSjA==","signatures":[{"sig":"MEUCIF5iZE8V2F/lp+pMe7bhUzmfpvlP/SIYzAxcbRr6VkTjAiEA9RgDuht/HeVlf8vYOQFGjTID7UPHh6Tij886MSiRdDA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21704},"main":"dist/main.js","type":"module","gitHead":"7c50f29a571586106de9e0a89c531d97945bb9c6","scripts":{"lint":"npx biome check src/","build":"tsc && npx biome check src/","start":"node dist/main.js","prepare":"tsc","lint:fix":"npx biome check --write src/"},"_npmUser":{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},"_npmVersion":"10.8.2","description":"A transparent MCP proxy that intercepts tool calls and evaluates them against the [Ackuity Inline Decision Engine](https://ackuity.ai) before they reach the MCP server. Destructive operations (DELETE, DROP, TRUNCATE) are blocked in real time.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@biomejs/biome":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/inline-proxy_0.7.2_1775080507302_0.9971714340582394","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"@ackuity/inline-proxy","version":"0.7.4","license":"MIT","_id":"@ackuity/inline-proxy@0.7.4","maintainers":[{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},{"name":"rajeshradhakrishnan135","email":"rajesh.radhakrishnan@ackuity.ai"}],"bin":{"inline-proxy":"dist/main.js"},"dist":{"shasum":"3e9b0b2fee8909f2c1e7dbabdf7bdd771e1836c1","tarball":"https://registry.npmjs.org/@ackuity/inline-proxy/-/inline-proxy-0.7.4.tgz","fileCount":8,"integrity":"sha512-CLvy05pOYk5oaYzLr02zDRUY6+Eflo4r5axgSpXW1XQ4ebmvF12cOzckfgcoMlaShZDw70UpOVliywtItQCzBA==","signatures":[{"sig":"MEUCIQCjWIG5ssClqqDF07m2VaWORw5P95EW355iL49xXh7ShwIgAR7Q7ZbmuJrcbItKQdT3MHWgNepbsTq9KZTQNgWy6Pw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24014},"main":"dist/main.js","type":"module","gitHead":"c5c73f5cb2bfdf66a8869dac73fe86803721c7c9","scripts":{"lint":"npx biome check src/","build":"tsc && npx biome check src/","start":"node dist/main.js","prepare":"tsc","lint:fix":"npx biome check --write src/"},"_npmUser":{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},"_npmVersion":"10.8.2","description":"A transparent MCP proxy that intercepts tool calls and evaluates them against the [Ackuity Inline Decision Engine](https://ackuity.ai) before they reach the MCP server. Destructive operations (DELETE, DROP, TRUNCATE) are blocked in real time.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@biomejs/biome":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/inline-proxy_0.7.4_1775089426626_0.9227017229175227","host":"s3://npm-registry-packages-npm-production"}},"0.7.6":{"name":"@ackuity/inline-proxy","version":"0.7.6","license":"MIT","_id":"@ackuity/inline-proxy@0.7.6","maintainers":[{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},{"name":"rajeshradhakrishnan135","email":"rajesh.radhakrishnan@ackuity.ai"}],"bin":{"inline-proxy":"dist/main.js"},"dist":{"shasum":"a0c9a124405631f47370c99ce2b3b49f83fc2212","tarball":"https://registry.npmjs.org/@ackuity/inline-proxy/-/inline-proxy-0.7.6.tgz","fileCount":8,"integrity":"sha512-gxpr752J8a04UbqKrHWy4UhH9WbwawoqSHnwXttgiqjsbVc0RJo4S6OSQb+2WAY7SMlo9Y4O7FtJWzM4LyG08A==","signatures":[{"sig":"MEUCIQDDP0vxc/DtSXNxJ38IadLnhWKF8nvjBzNxkon/MLBAGwIgFkW7Sft3YfjQoHIEhws6WIinmdmLPhCdT4jGKw59qrE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24637},"main":"dist/main.js","type":"module","gitHead":"bcfebd273b9dbbfb38a72f4b05feadca69b0b9c3","scripts":{"lint":"npx biome check src/","build":"tsc && npx biome check src/","start":"node dist/main.js","prepare":"tsc","lint:fix":"npx biome check --write src/"},"_npmUser":{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},"_npmVersion":"10.8.2","description":"A transparent MCP proxy that intercepts tool calls and evaluates them against the [Ackuity Inline Decision Engine](https://ackuity.ai) before they reach the MCP server. Destructive operations (DELETE, DROP, TRUNCATE) are blocked in real time.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@biomejs/biome":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/inline-proxy_0.7.6_1775850614485_0.3966020885127479","host":"s3://npm-registry-packages-npm-production"}},"0.7.7":{"name":"@ackuity/inline-proxy","version":"0.7.7","license":"MIT","_id":"@ackuity/inline-proxy@0.7.7","maintainers":[{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},{"name":"rajeshradhakrishnan135","email":"rajesh.radhakrishnan@ackuity.ai"}],"bin":{"inline-proxy":"dist/main.js"},"dist":{"shasum":"cd6e28cf1dc9f2fc940796310de4cc8a6122565f","tarball":"https://registry.npmjs.org/@ackuity/inline-proxy/-/inline-proxy-0.7.7.tgz","fileCount":8,"integrity":"sha512-UTOc6mJR/AvaRyi2m2LW0HGWBJF+ND10SISgdvHJrAcDdKpcGeB3D6buZ5t8ICQMns6jf2tLfFkmzlDcaMugqg==","signatures":[{"sig":"MEYCIQCi3UZhqZ6FALm9ZHrUyaEGTGzVeSFfm7rQHwuDdhoFPQIhAIexvwM5Vtg+n0isEfAuTJUjkInrfkoczTQPItil5p5V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25304},"main":"dist/main.js","type":"module","gitHead":"fb2caa74e7addf6cb5f22ddf3c2f500e1164de4a","scripts":{"lint":"npx biome check src/","build":"tsc && npx biome check src/","start":"node dist/main.js","prepare":"tsc","lint:fix":"npx biome check --write src/"},"_npmUser":{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},"_npmVersion":"10.8.2","description":"A transparent MCP proxy that intercepts tool calls and evaluates them against the [Ackuity Inline Decision Engine](https://ackuity.ai) before they reach the MCP server. Destructive operations (DELETE, DROP, TRUNCATE) are blocked in real time.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@biomejs/biome":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/inline-proxy_0.7.7_1775859875740_0.5653803518732781","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@ackuity/inline-proxy","version":"0.8.0","license":"MIT","_id":"@ackuity/inline-proxy@0.8.0","maintainers":[{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},{"name":"rajeshradhakrishnan135","email":"rajesh.radhakrishnan@ackuity.ai"}],"bin":{"inline-proxy":"dist/main.js"},"dist":{"shasum":"10fe049523e64b30b4d12610583db348c9e043fe","tarball":"https://registry.npmjs.org/@ackuity/inline-proxy/-/inline-proxy-0.8.0.tgz","fileCount":8,"integrity":"sha512-wVmoL3zRa5akP+IZZkzfykM3UnK6OGqMVlewnbjbo4SziNiSNOALtYQ9AxhC31oFx7pQGYsD5v/bGFgf3RdaOQ==","signatures":[{"sig":"MEQCIBQ1erhVeqgJfvJzYn6m2iqw4DnaHoZfejz0UNXvtBv7AiATsAMIEFkflBkI0m37vYvpR75Kz/9tmZl3YbjK2WujJg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27865},"main":"dist/main.js","type":"module","gitHead":"787b96f01c511d798a034c4a08c17f44f8cdb778","scripts":{"lint":"npx biome check src/","build":"tsc && npx biome check src/","start":"node dist/main.js","prepare":"tsc","lint:fix":"npx biome check --write src/"},"_npmUser":{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},"_npmVersion":"10.8.2","description":"A transparent MCP proxy that intercepts tool calls and evaluates them against the [Ackuity Inline Decision Engine](https://ackuity.ai) before they reach the MCP server. Destructive operations (DELETE, DROP, TRUNCATE) are blocked in real time.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@biomejs/biome":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/inline-proxy_0.8.0_1776460001027_0.6509885286542549","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@ackuity/inline-proxy","version":"0.8.1","license":"MIT","_id":"@ackuity/inline-proxy@0.8.1","maintainers":[{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},{"name":"rajeshradhakrishnan135","email":"rajesh.radhakrishnan@ackuity.ai"}],"bin":{"inline-proxy":"dist/main.js"},"dist":{"shasum":"38b3a1cb18d6c1e59ff2ff91f0e024eb2a888d5a","tarball":"https://registry.npmjs.org/@ackuity/inline-proxy/-/inline-proxy-0.8.1.tgz","fileCount":8,"integrity":"sha512-/qe8BnXdV+nJHFKjLZ75mqZeJP0C2zLNqz8JF4eNONNEbcTyn2M4UBDqta3FQEf3tTll7jnqUheMWTEPOpK5/Q==","signatures":[{"sig":"MEUCIH9aROAU21Z974VI4+4XO4J2ZcgbXw/J0UuAxtRyrS8ZAiEAur3POEMP8DanX0JwF7+0l+njy0t9zwe17GkB/Av/F0o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29740},"main":"dist/main.js","type":"module","gitHead":"ee5add63685c7c9e2c839e8fc6ba4d9ca63ccd27","scripts":{"lint":"npx biome check src/","build":"tsc && npx biome check src/","start":"node dist/main.js","prepare":"tsc","lint:fix":"npx biome check --write src/"},"_npmUser":{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},"_npmVersion":"10.8.2","description":"A transparent MCP proxy that intercepts tool calls and evaluates them against the [Ackuity Inline Decision Engine](https://ackuity.ai) before they reach the MCP server. Destructive operations (DELETE, DROP, TRUNCATE) are blocked in real time.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@biomejs/biome":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/inline-proxy_0.8.1_1776461462785_0.26762562372663745","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"@ackuity/inline-proxy","version":"0.8.3","license":"MIT","_id":"@ackuity/inline-proxy@0.8.3","maintainers":[{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},{"name":"rajeshradhakrishnan135","email":"rajesh.radhakrishnan@ackuity.ai"}],"bin":{"inline-proxy":"dist/main.js"},"dist":{"shasum":"322d5533231d97ff3b4bb022798df1430224f5e0","tarball":"https://registry.npmjs.org/@ackuity/inline-proxy/-/inline-proxy-0.8.3.tgz","fileCount":8,"integrity":"sha512-s543CunoAznFtzOrqgKzwmi7gCjfT6jyYT6q+BrhpY4YGM7DTm9K8OAosIwSJ1SAHKPmQQK8+M5i87TghDhzkA==","signatures":[{"sig":"MEUCIQCons0RkVxB0i9b+tBNZSEL8nGwF9ox4Fb9W3FWNgsifAIgZ/3rQ+rFnQRqLHSt6doIp9x4Ljh+5q6WlxmG4xlmih0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28288},"main":"dist/main.js","type":"module","gitHead":"ebb88d63fc709298f142d4002933cd1bdccf6cdc","scripts":{"lint":"npx biome check src/","build":"tsc && npx biome check src/","start":"node dist/main.js","prepare":"tsc","lint:fix":"npx biome check --write src/"},"_npmUser":{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},"_npmVersion":"10.8.2","description":"## Introduction","directories":{},"_nodeVersion":"20.20.2","dependencies":{"dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@biomejs/biome":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/inline-proxy_0.8.3_1776704913023_0.8633057568341531","host":"s3://npm-registry-packages-npm-production"}},"0.8.4":{"name":"@ackuity/inline-proxy","version":"0.8.4","license":"MIT","_id":"@ackuity/inline-proxy@0.8.4","maintainers":[{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},{"name":"rajeshradhakrishnan135","email":"rajesh.radhakrishnan@ackuity.ai"}],"bin":{"inline-proxy":"dist/main.js"},"dist":{"shasum":"3083fced784a1a3a9d360f2c15a95325f17093b7","tarball":"https://registry.npmjs.org/@ackuity/inline-proxy/-/inline-proxy-0.8.4.tgz","fileCount":8,"integrity":"sha512-z3RnDh0vu868EQJ/ZvNZUJZdifm0dtCXYgqyUW35Va6j6VX6/RZYGomFnTL8Vjl6eLrMjzN4ucvzeHgdSpt5gg==","signatures":[{"sig":"MEUCIC+VnUuwch2iiDOWe66f70yFbQ1nWKYtX5imtfr+cqvVAiEA2RX1r7Oj62ZFH9RDlfN4qxINRHf/mTVIPn10mRsY3NU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31954},"main":"dist/main.js","type":"module","gitHead":"70373977b055775845c06855b79021656dc6e51f","scripts":{"lint":"npx biome check src/","build":"tsc && npx biome check src/","start":"node dist/main.js","prepare":"tsc","lint:fix":"npx biome check --write src/"},"_npmUser":{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},"_npmVersion":"10.8.2","description":"## Introduction","directories":{},"_nodeVersion":"20.20.2","dependencies":{"dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@biomejs/biome":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/inline-proxy_0.8.4_1776708475480_0.34094895340500586","host":"s3://npm-registry-packages-npm-production"}},"0.8.5":{"name":"@ackuity/inline-proxy","version":"0.8.5","license":"MIT","_id":"@ackuity/inline-proxy@0.8.5","maintainers":[{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},{"name":"rajeshradhakrishnan135","email":"rajesh.radhakrishnan@ackuity.ai"}],"bin":{"inline-proxy":"dist/main.js"},"dist":{"shasum":"b1aacc326e586a7c37273777b4dcae025ed81421","tarball":"https://registry.npmjs.org/@ackuity/inline-proxy/-/inline-proxy-0.8.5.tgz","fileCount":8,"integrity":"sha512-wU13T5i+PdBDa/myQQLwEqVNXOfBQRPikcKoGPzmvCHaNpXBA6v77uUSNVUwLqX/IF2ainaJmCkPmhXjCSlSrg==","signatures":[{"sig":"MEUCIAkLo/ob9gIefiYwl/QQcHpZO1DTHQh4RzNxHIlJMLuyAiEAl99+32ShUI52AgyW2E5bNEL8E04To0pT0ap+XjBEe78=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33962},"main":"dist/main.js","type":"module","gitHead":"6957490af6a137cd2531fbe6f4dad52e9475137b","scripts":{"lint":"npx biome check src/","build":"tsc && npx biome check src/","start":"node dist/main.js","prepare":"tsc","lint:fix":"npx biome check --write src/"},"_npmUser":{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},"_npmVersion":"10.8.2","description":"## Introduction","directories":{},"_nodeVersion":"20.20.2","dependencies":{"dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@biomejs/biome":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/inline-proxy_0.8.5_1776841922597_0.23325144870837478","host":"s3://npm-registry-packages-npm-production"}},"0.8.6":{"name":"@ackuity/inline-proxy","version":"0.8.6","license":"MIT","_id":"@ackuity/inline-proxy@0.8.6","maintainers":[{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},{"name":"rajeshradhakrishnan135","email":"rajesh.radhakrishnan@ackuity.ai"}],"bin":{"inline-proxy":"dist/main.js"},"dist":{"shasum":"e12483af0a078c6c98e1eb470c206085ea0b4c73","tarball":"https://registry.npmjs.org/@ackuity/inline-proxy/-/inline-proxy-0.8.6.tgz","fileCount":8,"integrity":"sha512-d4hlwYgZvfLxrXzErk2XOrVjPSjKCbIZ0XYEJBqAykwK6tPPWAkEaKnVYAW4hgq2MxNY39jFBbCyYxW9Q6zLRg==","signatures":[{"sig":"MEUCIQDusAV1xqgySvNCxWFvmyDXGncsMTsSBKdlWxwdD6U7tgIgJyQeRGaX1KKF0BgST9q9vdxDvlcaZPsypoV35lfrYXk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35466},"main":"dist/main.js","type":"module","gitHead":"537d6042970cbcd75c7892f53a145f2acd10ec0a","scripts":{"lint":"npx biome check src/","build":"tsc && npx biome check src/","start":"node dist/main.js","prepare":"tsc","lint:fix":"npx biome check --write src/"},"_npmUser":{"name":"vinodvasudevan","email":"vinod.vasudevan@ackuity.ai"},"_npmVersion":"10.8.2","description":"## Introduction","directories":{},"_nodeVersion":"20.20.2","dependencies":{"dotenv":"^16.4.7","@modelcontextprotocol/sdk":"^1.28.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^25.4.0","@biomejs/biome":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/inline-proxy_0.8.6_1776848387195_0.5604914969738886","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-04-01T19:58:22.982Z","modified":"2026-05-07T14:51:01.558Z","0.7.0":"2026-04-01T19:58:23.226Z","0.7.1":"2026-04-01T20:29:06.306Z","0.7.2":"2026-04-01T21:55:07.412Z","0.7.4":"2026-04-02T00:23:46.836Z","0.7.6":"2026-04-10T19:50:14.673Z","0.7.7":"2026-04-10T22:24:35.885Z","0.8.0":"2026-04-17T21:06:41.161Z","0.8.1":"2026-04-17T21:31:03.117Z","0.8.3":"2026-04-20T17:08:33.172Z","0.8.4":"2026-04-20T18:07:55.620Z","0.8.5":"2026-04-22T07:12:02.744Z","0.8.6":"2026-04-22T08:59:47.329Z"},"license":"MIT","description":"## Introduction","maintainers":[{"email":"vinod.vasudevan@ackuity.ai","name":"vinodvasudevan"},{"email":"rajesh.radhakrishnan@ackuity.ai","name":"rajeshradhakrishnan135"},{"email":"vinod.kumar@ackuity.ai","name":"vinodkumar4252"}],"readme":"# Ackuity Inline MCP Proxy\n\n## Introduction\n\nToday, you connect with your MCP server in one of two ways:\n\n1. **stdio** — `agent → stdio → MCP server`\n2. **HTTP** — `agent → HTTP/HTTPS (REST API) → MCP server`\n\n**AckuityProxy** is a guardrail that can be inserted into both of these use cases. It intercepts MCP traffic and forwards high-risk messages to the Ackuity Inline Decision Engine to ensure there are no risks such as dangerous commands (DELETE, DROP, TRUNCATE), prompt injection, or XPIA (malicious URLs / indicators of compromise).\n\n```\n┌──────────┐     ┌──────────────────┐     ┌────────────┐\n│  Agent   │ ──▶ │  Ackuity Proxy   │ ──▶ │ MCP Server │\n└──────────┘     │                  │     └────────────┘\n                 │        │         │\n                 │        ▼         │\n                 │  Inline Engine   │\n                 └──────────────────┘\n```\n\n## Modes and Usage\n\nThe proxy operates in three modes:\n\n- **`stdio`** — the proxy talks to the agent over stdio, and spawns the MCP server itself as a child process. Use when the agent expects a single command to launch everything.\n- **`stdio-to-server`** — the proxy talks to the agent over stdio, but forwards to an already-running HTTP MCP server. Use when the agent expects stdio but the MCP server is hosted remotely.\n- **`server`** — the proxy runs as a standalone HTTP server. Both the agent and the MCP server communicate over HTTP. Use when the agent connects over HTTP (web apps, remote agents, containerized deployments).\n\n### Interception for each use case\n\n**Use case 1 (agent ↔ stdio ↔ MCP server):** use `stdio` mode. The proxy takes over the stdio connection, spawns the MCP server as its child, and inspects every message passing between them.\n\n```\nagent ──stdio──▶ AckuityProxy (stdio mode) ──stdio──▶ MCP server (spawned as child)\n```\n\n**Use case 2 (agent ↔ HTTP ↔ MCP server):** use `server` mode. The proxy runs as an HTTP endpoint that your agent connects to, and forwards traffic over HTTP to the real MCP server.\n\n```\nagent ──HTTP──▶ AckuityProxy (server mode) ──HTTP──▶ MCP server\n```\n\nIf the agent uses stdio but the MCP server is HTTP, use `stdio-to-server` mode as a bridge.\n\n## What the Proxy Checks\n\n- **`tools/call` (request path)** — tool name and arguments are sent to Ackuity's `protect_tools` endpoint. Destructive operations (DELETE, DROP, TRUNCATE) are blocked. The blocked call never reaches the MCP server; the agent receives a tool result with `isError: true`.\n- **`tools/list` (response path)** — the tool list returned by the MCP server is scanned for prompt injection and XPIA. If injection is detected (e.g. a compromised MCP server embedded hidden instructions in a tool description), the proxy returns an empty `tools` array so the agent cannot invoke any of those tools.\n\nThe session stays alive after a block — the agent can continue making other calls.\n\n## Setup\n\nThe examples below use `npx @ackuity/inline-proxy` so you don't need to install anything locally.\n\nThe examples use **Microsoft Data API Builder (DAB)** as the MCP server — DAB exposes an Azure SQL database over MCP so agents can issue SQL queries against the schema. The agent is a standard MCP client that runs SQL queries through DAB to read or modify data.\n\n> `dab-config.json` referenced in the commands below is **Microsoft DAB's own configuration file** (entity definitions, DB connection strings, etc.) — it is not specific to Ackuity. See [Microsoft's DAB docs](https://learn.microsoft.com/en-us/azure/data-api-builder/) for its contents.\n\n> **No code changes are required.** Your imports, client class, and tool-calling logic all stay the same. The **only** things that change are the `command` and `args` (in stdio mode) or the endpoint URL (in HTTP mode) — i.e. what the agent is connecting to.\n\n### Configuration\n\nThe proxy reads three environment variables:\n\n| Variable           | Required | Description |\n|--------------------|----------|-------------|\n| `INLINE_API_TOKEN` | Yes      | Bearer token for the Inline Decision Engine |\n| `INLINE_URL`       | Yes      | Protect tools endpoint URL (e.g. `https://inline.ackuity.ai/api/v1/inline/protect_tools`) |\n| `INLINE_AGENT_ID`  | Yes      | Agent ID registered with the Inline Engine |\n\n### CLI Arguments\n\nThe proxy accepts the following command-line arguments:\n\n| Argument      | Required                          | Default  | Description |\n|---------------|-----------------------------------|----------|-------------|\n| `--mode`      | Yes                               | —        | Operating mode. One of: `stdio`, `stdio-to-server`, `server`. |\n| `--cmd`       | Yes for `stdio` mode              | —        | The full command (with args, as a single string) that the proxy will spawn as its child process — e.g. the MCP server launch command. |\n| `--target`    | Yes for `stdio-to-server` and `server` modes | — | HTTP(S) URL of the upstream MCP server (e.g. `http://localhost:5000/mcp`). |\n| `--port`      | No                                | `7500`   | TCP port the proxy listens on (only used in `server` mode). |\n| `--tool-name` | No                                | `unknown`| A label for this proxy instance. Sent to the Inline Decision Engine as the `tool_name` in the `protect_tools` request, so you can distinguish traffic from different proxies in Ackuity's logs. |\n\n### Use case 1: Agent uses stdio\n\nThe agent launches the MCP server as a subprocess. To insert the proxy, the agent launches the **proxy** as its subprocess instead, and the proxy in turn spawns the MCP server (DAB).\n\n**Python**\n\n<table>\n<tr><th>Before</th><th>After</th></tr>\n<tr><td>\n\n```python\ncommand=\"npx\",\nargs=[\n    \"@azure/data-api-builder\",\n    \"start\",\n    \"--config\", \"dab-config.json\",\n],\n```\n\n</td><td>\n\n```python\ncommand=\"npx\",\nargs=[\n    \"@ackuity/inline-proxy\",\n    \"--mode\", \"stdio\",\n    \"--cmd\", \"npx @azure/data-api-builder start --config dab-config.json\",\n],\nenv={\n    **os.environ,\n    \"INLINE_API_TOKEN\": \"your_token_here\",\n    \"INLINE_URL\": \"https://inline.ackuity.ai/api/v1/inline/protect_tools\",\n    \"INLINE_AGENT_ID\": \"your_agent_id_here\",\n},\n```\n\n</td></tr>\n</table>\n\nThe agent now spawns `@ackuity/inline-proxy` instead of DAB directly. The original DAB launch command is passed to the proxy via `--cmd`, and the three `INLINE_*` env vars tell the proxy how to reach the Decision Engine.\n\n**TypeScript / JavaScript**\n\n<table>\n<tr><th>Before</th><th>After</th></tr>\n<tr><td>\n\n```typescript\ncommand: \"npx\",\nargs: [\n  \"@azure/data-api-builder\",\n  \"start\",\n  \"--config\", \"dab-config.json\",\n],\n```\n\n</td><td>\n\n```typescript\ncommand: \"npx\",\nargs: [\n  \"@ackuity/inline-proxy\",\n  \"--mode\", \"stdio\",\n  \"--cmd\", \"npx @azure/data-api-builder start --config dab-config.json\",\n],\nenv: {\n  ...process.env,\n  INLINE_API_TOKEN: \"your_token_here\",\n  INLINE_URL: \"https://inline.ackuity.ai/api/v1/inline/protect_tools\",\n  INLINE_AGENT_ID: \"your_agent_id_here\",\n},\n```\n\n</td></tr>\n</table>\n\nSame pattern as Python — the TypeScript agent points to the proxy instead of DAB, and DAB's launch command is passed through `--cmd`.\n\n**Claude Desktop (and other config-driven MCP clients)**\n\nClients like Claude Desktop, Cursor, and Windsurf don't require code changes — they spawn MCP servers based on a JSON config file (`claude_desktop_config.json` for Claude Desktop). Replace the entry for your MCP server with one that launches the proxy instead.\n\n<table>\n<tr><th>Before</th><th>After</th></tr>\n<tr><td>\n\n```json\n{\n  \"mcpServers\": {\n    \"dab\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"@azure/data-api-builder\",\n        \"start\",\n        \"--config\", \"dab-config.json\"\n      ]\n    }\n  }\n}\n```\n\n</td><td>\n\n```json\n{\n  \"mcpServers\": {\n    \"dab\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"@ackuity/inline-proxy\",\n        \"--mode\", \"stdio\",\n        \"--cmd\", \"npx @azure/data-api-builder start --config dab-config.json\"\n      ],\n      \"env\": {\n        \"INLINE_API_TOKEN\": \"your_token_here\",\n        \"INLINE_URL\": \"https://inline.ackuity.ai/api/v1/inline/protect_tools\",\n        \"INLINE_AGENT_ID\": \"your_agent_id_here\"\n      }\n    }\n  }\n}\n```\n\n</td></tr>\n</table>\n\nClaude Desktop now launches the proxy over stdio (which it already supports), and the proxy spawns DAB as its child. No change to Claude Desktop itself — just this config entry.\n\n> **Tip:** If your MCP server is already running over HTTP (for example a remote service), use `--mode stdio-to-server --target https://your-mcp-server.com/mcp` instead of `--mode stdio --cmd \"...\"`. Claude Desktop still talks to the proxy over stdio; the proxy handles the HTTP leg.\n\n### Use case 2: Agent uses HTTP\n\nThe agent connects to DAB over HTTP. To insert the proxy, run the proxy as its own HTTP service and point the agent to the proxy's URL instead of DAB's.\n\n**docker-compose.yml**\n\n<table>\n<tr><th>Before</th><th>After</th></tr>\n<tr><td>\n\n```yaml\nservices:\n  mcp-server:\n    image: dab-image\n    ports:\n      - \"5000:5000\"\n\n  agent:\n    image: your-agent-image\n    environment:\n      MCP_ENDPOINT: http://mcp-server:5000/mcp\n```\n\n</td><td>\n\n```yaml\nservices:\n  mcp-server:\n    image: dab-image\n    ports:\n      - \"5000:5000\"\n\n  ackuity-proxy:\n    image: node:22-slim\n    command: npx @ackuity/inline-proxy --mode server --target http://mcp-server:5000/mcp --port 7500\n    ports:\n      - \"7500:7500\"\n    environment:\n      INLINE_API_TOKEN: ${INLINE_API_TOKEN}\n      INLINE_URL: ${INLINE_URL}\n      INLINE_AGENT_ID: ${INLINE_AGENT_ID}\n\n  agent:\n    image: your-agent-image\n    environment:\n      MCP_ENDPOINT: http://ackuity-proxy:7500/mcp\n```\n\n</td></tr>\n</table>\n\nA new `ackuity-proxy` service is added between the agent and the MCP server. The agent's `MCP_ENDPOINT` now points to the proxy (`ackuity-proxy:7500`) instead of directly to DAB (`mcp-server:5000`). The proxy forwards allowed calls to DAB via `--target`.\n\nProvide the `INLINE_*` values in a `.env` file alongside `docker-compose.yml`:\n\n```env\nINLINE_API_TOKEN=your_token_here\nINLINE_URL=https://inline.ackuity.ai/api/v1/inline/protect_tools\nINLINE_AGENT_ID=your_agent_id_here\n```\n\nThen start everything with `docker compose up`.\n\n### Running outside Docker\n\nIf you're not using containers, start the proxy manually:\n\n```bash\nnpx @ackuity/inline-proxy --mode server --target http://localhost:5000/mcp --port 7500\n```\n\nThen point your agent to `http://localhost:7500/mcp`.\n\n## Authenticated MCP Servers (OAuth / Bearer Tokens)\n\nServer mode is the recommended approach when your MCP server requires authentication. The proxy transparently forwards all headers (including `Authorization`), so your agent's existing auth flow works unchanged — just change the endpoint URL to point to the proxy.\n\n```typescript\nconst response = await fetch(\"http://localhost:7500/mcp\", {\n  method: \"POST\",\n  headers: {\n    \"Content-Type\": \"application/json\",\n    \"Authorization\": \"Bearer <your-oauth-token>\",  // forwarded to MCP server\n  },\n  body: JSON.stringify({\n    jsonrpc: \"2.0\",\n    method: \"tools/call\",\n    params: { name: \"delete_record\", arguments: { id: 123 } },\n  }),\n});\n```\n\n**Token expiry:** if the MCP server returns `401 Unauthorized` or `403 Forbidden`, the token has expired. Your agent is responsible for refreshing the token with the OAuth provider and retrying the request — the proxy passes these status codes through unchanged.\n\n## Fail-Closed Behavior\n\nIf the Inline Decision Engine is unreachable or returns an error (e.g. invalid token), the proxy fails closed:\n\n- **Tool calls** are blocked rather than forwarded, preventing destructive operations from slipping through during outages.\n- **Tool lists** are returned with an empty `tools` array, preventing the agent from invoking any tool whose description could not be scanned for injection.\n\n## Logging\n\nAll MCP traffic is logged to `proxy_logs/proxy_traffic.txt` in the working directory. Status messages are written to stderr with a `[PROXY]` prefix.\n\n## Project Structure\n\n```\nsrc/\n├── main.ts            Entry point, arg parsing, mode selection\n├── common.ts          Shared utilities (logging, arg parser, constants)\n├── inline_engine.ts   Protect Tools API types, response manager, polling, API call\n└── mode.ts            ProxyMode interface and implementations (Stdio, StdioToServer, Server)\n```\n","readmeFilename":"README.md"}