{"_id":"@frontmcp/plugin-result-handles","_rev":"15-c5eefe3ae7983407e939d828045d28a1","name":"@frontmcp/plugin-result-handles","dist-tags":{"rc":"1.12.0-rc.1","latest":"1.12.2"},"versions":{"0.0.0-stage":{"name":"@frontmcp/plugin-result-handles","version":"0.0.0-stage","_id":"@frontmcp/plugin-result-handles@0.0.0-stage","stub":true,"maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"dist":{"shasum":"d55d7082274957010fbc336d72f089c8d40ff809","tarball":"https://registry.npmjs.org/@frontmcp/plugin-result-handles/-/plugin-result-handles-0.0.0-stage.tgz","fileCount":2,"integrity":"sha512-mD51dIqBBwKLtLyK3VxHgV1FpjDFTESvxE864BwcYVV7rhAUt/fyBHljajaKKGXCnAYO6Y5PFZFk6yMrp3M2bg==","signatures":[{"sig":"MEYCIQDrtmobzGR0d+miE7GMM9NO/uHRYRyE71+hT+EWNZprnAIhAIn4QmN0bWETvzrkNF0cVSKwd/p+zwzXw0/AcXnT3HpN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":353},"_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"description":"Temporary package placeholder for staged publishing","directories":{}},"0.0.1":{"name":"@frontmcp/plugin-result-handles","version":"0.0.1","keywords":["frontmcp","mcp","model-context-protocol","result-handles","large-results","pagination","plugin","agentfront"],"author":{"name":"AgentFront","email":"info@agentfront.dev"},"license":"Apache-2.0","_id":"@frontmcp/plugin-result-handles@0.0.1","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"homepage":"https://frontmcp.dev/reference/plugins/result-handles","bugs":{"url":"https://github.com/agentfront/frontmcp/issues"},"dist":{"shasum":"23ef1693436f95f50837373dc22bd329348aaa11","tarball":"https://registry.npmjs.org/@frontmcp/plugin-result-handles/-/plugin-result-handles-0.0.1.tgz","fileCount":26,"integrity":"sha512-/DiywBZThqmXDEOupgXZaouarpeiheRkunv8GA2236LWf0nh8IewfscFdsj8bcz7qOH1L6jcOUkgkAwYQ9KBVQ==","signatures":[{"sig":"MEQCICmszh7eQaAfRKjLmpWiq9l4+ErJnePa4tn29nm9jNKOAiAk1H6Fg7VIgfWd7Q5ED3YjF/XIXHedTQ2LxNzhSyuiXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDjQ+Macq5x7+D5JxZayKC0ppFvfnHgRrR3xpkbWCWTgQIhAL4lkUIEmGwmsWpnqV6pmUxkGoVNe68JsLGGKJm5TYQv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84551},"main":"./index.js","type":"commonjs","types":"./index.d.ts","module":"./esm/index.mjs","engines":{"node":">=24.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./esm/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./package.json":"./package.json"},"gitHead":"b8eb91e2bcb9e6aeb6790d30c4585da040ff68c4","_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"repository":{"url":"git+https://github.com/agentfront/frontmcp.git","type":"git","directory":"plugins/plugin-result-handles"},"_npmVersion":"11.19.1","description":"Result handles plugin for FrontMCP: folds large tool answers into a preview, a shape and a handle, and lets the model read the rest with result_query","directories":{},"sideEffects":false,"_nodeVersion":"24.22.1","dependencies":{"@frontmcp/utils":"1.10.16"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"@frontmcp/sdk":"1.10.16","reflect-metadata":"^0.2.2"},"peerDependencies":{"@frontmcp/sdk":"1.10.16","@frontmcp/lazy-zod":"1.10.16"},"_npmOperationalInternal":{"tmp":"tmp/plugin-result-handles_0.0.1_1793735172788_0.903436644245424","host":"s3://npm-registry-packages-npm-production"}},"1.11.0-rc.1":{"name":"@frontmcp/plugin-result-handles","version":"1.11.0-rc.1","keywords":["frontmcp","mcp","model-context-protocol","result-handles","large-results","pagination","plugin","agentfront"],"author":{"name":"AgentFront","email":"info@agentfront.dev"},"license":"Apache-2.0","_id":"@frontmcp/plugin-result-handles@1.11.0-rc.1","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"homepage":"https://frontmcp.dev/reference/plugins/result-handles","bugs":{"url":"https://github.com/agentfront/frontmcp/issues"},"dist":{"shasum":"31870cbca1179f95e44f210397377f56ddb0c267","tarball":"https://registry.npmjs.org/@frontmcp/plugin-result-handles/-/plugin-result-handles-1.11.0-rc.1.tgz","fileCount":26,"integrity":"sha512-27EDK30O0L0PtnKhFDcSNNyIZc1SNmR92YEp563k69QO9Tihb4IGaMnviml69qJb6f7CNE579Z459G7TsJQhjQ==","signatures":[{"sig":"MEUCIDAa09VN79k3GIXe9/lWljmg6JxqtVRVioBQlv0tikdTAiEA8XQ27CITAn5efcAKsDJRAlMTRuX25UhWMIF7Yhf9QZE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEceaclagr+8+3k46fJxWQi4wkQqGphnbSuZ9nxJ/6dqAiEAiDH71DQQRBucg3bFmy8+4c9Yb0TSNF8/cTHyPjOBY2Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@frontmcp%2fplugin-result-handles@1.11.0-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84593},"main":"./index.js","type":"commonjs","types":"./index.d.ts","module":"./esm/index.mjs","engines":{"node":">=24.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./esm/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./package.json":"./package.json"},"gitHead":"ec31e9faf34751ff0f4a399136aff673ba8fc4ba","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"803b062f-6b0b-4491-9112-c444b603a1ab"}},"repository":{"url":"git+https://github.com/agentfront/frontmcp.git","type":"git","directory":"plugins/plugin-result-handles"},"_npmVersion":"11.5.1","description":"Result handles plugin for FrontMCP: folds large tool answers into a preview, a shape and a handle, and lets the model read the rest with result_query","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@frontmcp/utils":"1.11.0-rc.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"@frontmcp/sdk":"1.11.0-rc.1","reflect-metadata":"^0.2.2"},"peerDependencies":{"@frontmcp/sdk":"1.11.0-rc.1","@frontmcp/lazy-zod":"1.11.0-rc.1"},"_npmOperationalInternal":{"tmp":"tmp/plugin-result-handles_1.11.0-rc.1_1793735374868_0.5398236960928159","host":"s3://npm-registry-packages-npm-production"}},"1.11.0-rc.2":{"name":"@frontmcp/plugin-result-handles","version":"1.11.0-rc.2","keywords":["frontmcp","mcp","model-context-protocol","result-handles","large-results","pagination","plugin","agentfront"],"author":{"name":"AgentFront","email":"info@agentfront.dev"},"license":"Apache-2.0","_id":"@frontmcp/plugin-result-handles@1.11.0-rc.2","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"homepage":"https://frontmcp.dev/reference/plugins/result-handles","bugs":{"url":"https://github.com/agentfront/frontmcp/issues"},"dist":{"shasum":"715d5ade24f5e07220f2994154a8a597a564ee81","tarball":"https://registry.npmjs.org/@frontmcp/plugin-result-handles/-/plugin-result-handles-1.11.0-rc.2.tgz","fileCount":26,"integrity":"sha512-Ng6VoRe1pYJcWZcuQ7wUsRVFzpixoIlSSSUVZ955UoyMwNRNyqLzgcQcAqTK9P4+JfLlAtkBopDR1TIXrQlosA==","signatures":[{"sig":"MEQCIBS9ujHB0COk/PTRP+B07/xKLvcXT0mRN9H3Qky3FIWWAiAc2UJL9pyUcyxY6YavVfC1NNXxbJro4jbGN4bL51cGqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEyMupAm9bTmS5N8p0vCdCFVI359LFjmqi0Feaa+r+rVAiEA+wY1QBsnihpdmxljAzHexoT/reoT+zYHWF9abDfRSaE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@frontmcp%2fplugin-result-handles@1.11.0-rc.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84593},"main":"./index.js","type":"commonjs","types":"./index.d.ts","module":"./esm/index.mjs","engines":{"node":">=24.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./esm/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./package.json":"./package.json"},"gitHead":"f34b5a5a3623c66aed8976f450bcd36c00cad8c2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"803b062f-6b0b-4491-9112-c444b603a1ab"}},"repository":{"url":"git+https://github.com/agentfront/frontmcp.git","type":"git","directory":"plugins/plugin-result-handles"},"_npmVersion":"11.5.1","description":"Result handles plugin for FrontMCP: folds large tool answers into a preview, a shape and a handle, and lets the model read the rest with result_query","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@frontmcp/utils":"1.11.0-rc.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"@frontmcp/sdk":"1.11.0-rc.2","reflect-metadata":"^0.2.2"},"peerDependencies":{"@frontmcp/sdk":"1.11.0-rc.2","@frontmcp/lazy-zod":"1.11.0-rc.2"},"_npmOperationalInternal":{"tmp":"tmp/plugin-result-handles_1.11.0-rc.2_1793744321119_0.9560262251402429","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@frontmcp/plugin-result-handles","version":"1.11.0","keywords":["frontmcp","mcp","model-context-protocol","result-handles","large-results","pagination","plugin","agentfront"],"author":{"name":"AgentFront","email":"info@agentfront.dev"},"license":"Apache-2.0","_id":"@frontmcp/plugin-result-handles@1.11.0","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"homepage":"https://frontmcp.dev/reference/plugins/result-handles","bugs":{"url":"https://github.com/agentfront/frontmcp/issues"},"dist":{"shasum":"3675f99f7874328dadbb4fde37eb31d6168bdf92","tarball":"https://registry.npmjs.org/@frontmcp/plugin-result-handles/-/plugin-result-handles-1.11.0.tgz","fileCount":26,"integrity":"sha512-eINoae3N8pqrqbsNMpzGp8l6pZe2e/sZKbzR3Ai4js5qgoU+2Yekd231VckoCCDYDb3EZQUzbZJlOv5Drk9iUA==","signatures":[{"sig":"MEUCIQCR7ZB8KYrpyTr050uGmI9PUPlG63ryRCVySoT7hd4gCAIgDZppL5xeps/C2Z+W5k/pKWNz7QH7xInn4E/5tPIDqU4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCCgGVKvq64m4tWMFy2+awrcrGr3C5ikR+XIzvQFByPsgIhANtuQ6SHC1onVKOHjA4m0ceVktvR2m76dzSilJiwyWeL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@frontmcp%2fplugin-result-handles@1.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84543},"main":"./index.js","type":"commonjs","types":"./index.d.ts","module":"./esm/index.mjs","engines":{"node":">=24.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./esm/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./package.json":"./package.json"},"gitHead":"8108a08929bdc0ebc4c79d7a4f0cab9b260469de","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"803b062f-6b0b-4491-9112-c444b603a1ab"}},"repository":{"url":"git+https://github.com/agentfront/frontmcp.git","type":"git","directory":"plugins/plugin-result-handles"},"_npmVersion":"11.5.1","description":"Result handles plugin for FrontMCP: folds large tool answers into a preview, a shape and a handle, and lets the model read the rest with result_query","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@frontmcp/utils":"1.11.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"@frontmcp/sdk":"1.11.0","reflect-metadata":"^0.2.2"},"peerDependencies":{"@frontmcp/sdk":"1.11.0","@frontmcp/lazy-zod":"1.11.0"},"_npmOperationalInternal":{"tmp":"tmp/plugin-result-handles_1.11.0_1793746843425_0.7987118944801991","host":"s3://npm-registry-packages-npm-production"}},"1.11.1-rc.1":{"name":"@frontmcp/plugin-result-handles","version":"1.11.1-rc.1","keywords":["frontmcp","mcp","model-context-protocol","result-handles","large-results","pagination","plugin","agentfront"],"author":{"name":"AgentFront","email":"info@agentfront.dev"},"license":"Apache-2.0","_id":"@frontmcp/plugin-result-handles@1.11.1-rc.1","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"homepage":"https://frontmcp.dev/reference/plugins/result-handles","bugs":{"url":"https://github.com/agentfront/frontmcp/issues"},"dist":{"shasum":"566843e01b3a4de3ed785617e440d365c408f996","tarball":"https://registry.npmjs.org/@frontmcp/plugin-result-handles/-/plugin-result-handles-1.11.1-rc.1.tgz","fileCount":26,"integrity":"sha512-fRyPJ+XYjEJoY6USTU4zRvfJKrYzZFl/A/g9AZ8v6k+53xUSElaoFsH0fuIHXAi4DkRucrY9TicnNnFIXv6rTA==","signatures":[{"sig":"MEQCIFCEDHqka3jgABYFwKZc6dPLa1Y0FfFWF0ustIrHrFhIAiBuGBUlCneOMqKaSAbVdmJgfdtjq8BAiq1jRljP2L7GGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCID6AdCKCz8bdxgIKo9JSK/n4x2qEF5ziRm/uOxlhF1wKAiB9Cz3Khc0YYNLqlV4t2g1C63JwApByJUNksD3Iikom1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@frontmcp%2fplugin-result-handles@1.11.1-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84593},"main":"./index.js","type":"commonjs","types":"./index.d.ts","module":"./esm/index.mjs","engines":{"node":">=24.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./esm/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./package.json":"./package.json"},"gitHead":"bbf139f23edf30e23dec4d2f4defd598a775d5ca","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"803b062f-6b0b-4491-9112-c444b603a1ab"}},"repository":{"url":"git+https://github.com/agentfront/frontmcp.git","type":"git","directory":"plugins/plugin-result-handles"},"_npmVersion":"11.5.1","description":"Result handles plugin for FrontMCP: folds large tool answers into a preview, a shape and a handle, and lets the model read the rest with result_query","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@frontmcp/utils":"1.11.1-rc.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"@frontmcp/sdk":"1.11.1-rc.1","reflect-metadata":"^0.2.2"},"peerDependencies":{"@frontmcp/sdk":"1.11.1-rc.1","@frontmcp/lazy-zod":"1.11.1-rc.1"},"_npmOperationalInternal":{"tmp":"tmp/plugin-result-handles_1.11.1-rc.1_1793842161836_0.277720746064134","host":"s3://npm-registry-packages-npm-production"}},"1.11.1-rc.2":{"name":"@frontmcp/plugin-result-handles","version":"1.11.1-rc.2","keywords":["frontmcp","mcp","model-context-protocol","result-handles","large-results","pagination","plugin","agentfront"],"author":{"name":"AgentFront","email":"info@agentfront.dev"},"license":"Apache-2.0","_id":"@frontmcp/plugin-result-handles@1.11.1-rc.2","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"homepage":"https://frontmcp.dev/reference/plugins/result-handles","bugs":{"url":"https://github.com/agentfront/frontmcp/issues"},"dist":{"shasum":"dddcc660fc9f59b5b29be3bb3444e055bbe4df33","tarball":"https://registry.npmjs.org/@frontmcp/plugin-result-handles/-/plugin-result-handles-1.11.1-rc.2.tgz","fileCount":26,"integrity":"sha512-rlYa78OPeoPNGoZmAfSjz+J0rLlY+lJX5iywuaqeRKkkaBuCVjbpscIypRc5wy7oIRWOF0+a6YT6ss4omYmk4g==","signatures":[{"sig":"MEUCIAHamjRtMPOQX55uomlV92xZkEAc1tLyrvcerRHNQQnZAiEA5Cpt8r9WHm7H+/6dVBItmlFVoQf0jUZof04W6RjmZSk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCTpfIxweZXX0MuoB21LwkDLvAsYPBed0V1bGiHhI5y6wIhANnDsoxV0Ru1mM1p6D2BMCmP2ucpQtF6/NyiL6aFnLxJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@frontmcp%2fplugin-result-handles@1.11.1-rc.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84593},"main":"./index.js","type":"commonjs","types":"./index.d.ts","module":"./esm/index.mjs","engines":{"node":">=24.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./esm/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./package.json":"./package.json"},"gitHead":"f502e5a9af9b8a20ef69be8297d9ad6aa544f9cd","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"803b062f-6b0b-4491-9112-c444b603a1ab"}},"repository":{"url":"git+https://github.com/agentfront/frontmcp.git","type":"git","directory":"plugins/plugin-result-handles"},"_npmVersion":"11.5.1","description":"Result handles plugin for FrontMCP: folds large tool answers into a preview, a shape and a handle, and lets the model read the rest with result_query","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@frontmcp/utils":"1.11.1-rc.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"@frontmcp/sdk":"1.11.1-rc.2","reflect-metadata":"^0.2.2"},"peerDependencies":{"@frontmcp/sdk":"1.11.1-rc.2","@frontmcp/lazy-zod":"1.11.1-rc.2"},"_npmOperationalInternal":{"tmp":"tmp/plugin-result-handles_1.11.1-rc.2_1793905330977_0.8105488564688604","host":"s3://npm-registry-packages-npm-production"}},"1.11.1":{"name":"@frontmcp/plugin-result-handles","version":"1.11.1","keywords":["frontmcp","mcp","model-context-protocol","result-handles","large-results","pagination","plugin","agentfront"],"author":{"name":"AgentFront","email":"info@agentfront.dev"},"license":"Apache-2.0","_id":"@frontmcp/plugin-result-handles@1.11.1","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"homepage":"https://frontmcp.dev/reference/plugins/result-handles","bugs":{"url":"https://github.com/agentfront/frontmcp/issues"},"dist":{"shasum":"b08bccfd4d5f4139a0725b1b75f1d076a1f45818","tarball":"https://registry.npmjs.org/@frontmcp/plugin-result-handles/-/plugin-result-handles-1.11.1.tgz","fileCount":26,"integrity":"sha512-K6KonmmIEPcpUUS3tFTYh7PV3tgp4K4AuD85ON63qyJhy4kEP8rQoHtoI5ZTohGEhg5hnWVH4L2kuwZszPC+4A==","signatures":[{"sig":"MEUCIQCDRYLg7N0wURkDL30Da2YU3bGcDNqlQiQy6qETZ5epIQIgWMzO4MM88bePoIty5eRGtKHmGv0p6JGGdgMyZ+Mia4I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBM9g972vuY+1BD0e21zSNEptZQyqLhhD47BYipnsl6vAiEAmMCYpD1stRcmV0JJpv24TREbTC8dXbwCTjG62ZTLcYI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@frontmcp%2fplugin-result-handles@1.11.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84543},"main":"./index.js","type":"commonjs","types":"./index.d.ts","module":"./esm/index.mjs","engines":{"node":">=24.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./esm/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./package.json":"./package.json"},"gitHead":"e643a41d5343c553f1416fc4c67022830017e60b","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"803b062f-6b0b-4491-9112-c444b603a1ab"}},"repository":{"url":"git+https://github.com/agentfront/frontmcp.git","type":"git","directory":"plugins/plugin-result-handles"},"_npmVersion":"11.5.1","description":"Result handles plugin for FrontMCP: folds large tool answers into a preview, a shape and a handle, and lets the model read the rest with result_query","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@frontmcp/utils":"1.11.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"@frontmcp/sdk":"1.11.1","reflect-metadata":"^0.2.2"},"peerDependencies":{"@frontmcp/sdk":"1.11.1","@frontmcp/lazy-zod":"1.11.1"},"_npmOperationalInternal":{"tmp":"tmp/plugin-result-handles_1.11.1_1794133092720_0.8898009960000279","host":"s3://npm-registry-packages-npm-production"}},"1.11.2":{"name":"@frontmcp/plugin-result-handles","version":"1.11.2","keywords":["frontmcp","mcp","model-context-protocol","result-handles","large-results","pagination","plugin","agentfront"],"author":{"name":"AgentFront","email":"info@agentfront.dev"},"license":"Apache-2.0","_id":"@frontmcp/plugin-result-handles@1.11.2","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"homepage":"https://frontmcp.dev/reference/plugins/result-handles","bugs":{"url":"https://github.com/agentfront/frontmcp/issues"},"dist":{"shasum":"a961b74f592a5fc977a627623771cf673f16d73b","tarball":"https://registry.npmjs.org/@frontmcp/plugin-result-handles/-/plugin-result-handles-1.11.2.tgz","fileCount":26,"integrity":"sha512-VZ2n2F1MX4WUfgpOU2w7M1RFCs3awao7IpLm3e+UCJIegeXiqYsd+0ktnsw44qwbyIwWojgy8cEpg17zHwSZQQ==","signatures":[{"sig":"MEUCIQD0kRrBtj/IF0Vhyn9Y15mdVnKIPyeqN/TDY9vBrZf07AIgB4Mndsrn0AEE2OZ/mzYMGc2VjQhcqeFsjfKKOxIQdig=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDnIAMDCzo1S6Efb83LL4cH9LpTDCcxHW1zqOZyz0S+rQIhANcBK6hA0Ft/hyqUTh0lT+V765IgOzvJHozLVXKJAT4m","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@frontmcp%2fplugin-result-handles@1.11.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84543},"main":"./index.js","type":"commonjs","types":"./index.d.ts","module":"./esm/index.mjs","engines":{"node":">=24.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./esm/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./package.json":"./package.json"},"gitHead":"1502559231d1c3e1299aef5f2d3c299fcd042856","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"803b062f-6b0b-4491-9112-c444b603a1ab"}},"repository":{"url":"git+https://github.com/agentfront/frontmcp.git","type":"git","directory":"plugins/plugin-result-handles"},"_npmVersion":"11.5.1","description":"Result handles plugin for FrontMCP: folds large tool answers into a preview, a shape and a handle, and lets the model read the rest with result_query","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@frontmcp/utils":"1.11.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"@frontmcp/sdk":"1.11.2","reflect-metadata":"^0.2.2"},"peerDependencies":{"@frontmcp/sdk":"1.11.2","@frontmcp/lazy-zod":"1.11.2"},"_npmOperationalInternal":{"tmp":"tmp/plugin-result-handles_1.11.2_1794185824626_0.5042032613516265","host":"s3://npm-registry-packages-npm-production"}},"1.11.3":{"name":"@frontmcp/plugin-result-handles","version":"1.11.3","keywords":["frontmcp","mcp","model-context-protocol","result-handles","large-results","pagination","plugin","agentfront"],"author":{"name":"AgentFront","email":"info@agentfront.dev"},"license":"Apache-2.0","_id":"@frontmcp/plugin-result-handles@1.11.3","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"homepage":"https://frontmcp.dev/reference/plugins/result-handles","bugs":{"url":"https://github.com/agentfront/frontmcp/issues"},"dist":{"shasum":"b5ea4c32fde50a296abba310e9f3673b028a2cb6","tarball":"https://registry.npmjs.org/@frontmcp/plugin-result-handles/-/plugin-result-handles-1.11.3.tgz","fileCount":26,"integrity":"sha512-QCdzpjqawyafGjmSIiwYY25pdkqqxRMA4+Ifmeq3jJ7UJUlpbrSxQp3Bjw1qh8OAICRVBG7kM9golUdUoc42CA==","signatures":[{"sig":"MEUCIQCNz9TMiRg6Vl8kZ+Szh9PPaNgTpjwHLeLxqrSVzlsaDwIgIBpMvxuvpEmu7un6cS3uVXCNp23FQ9c/NrtXugayezs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDXfFHQufyzScBVuX8NjqolaIuTkBrWe/TQifdjLAPksAiEA+nlSWOBnCHnvhYcPIW31vCuYQYM8lfMSZy7jcXs9VRw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@frontmcp%2fplugin-result-handles@1.11.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84543},"main":"./index.js","type":"commonjs","types":"./index.d.ts","module":"./esm/index.mjs","engines":{"node":">=24.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./esm/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./package.json":"./package.json"},"gitHead":"4704a658adb1139f111d661a3313a3101dc0455d","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"803b062f-6b0b-4491-9112-c444b603a1ab"}},"repository":{"url":"git+https://github.com/agentfront/frontmcp.git","type":"git","directory":"plugins/plugin-result-handles"},"_npmVersion":"11.5.1","description":"Result handles plugin for FrontMCP: folds large tool answers into a preview, a shape and a handle, and lets the model read the rest with result_query","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@frontmcp/utils":"1.11.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"@frontmcp/sdk":"1.11.3","reflect-metadata":"^0.2.2"},"peerDependencies":{"@frontmcp/sdk":"1.11.3","@frontmcp/lazy-zod":"1.11.3"},"_npmOperationalInternal":{"tmp":"tmp/plugin-result-handles_1.11.3_1794254156773_0.03305584100438119","host":"s3://npm-registry-packages-npm-production"}},"1.12.0-rc.1":{"name":"@frontmcp/plugin-result-handles","version":"1.12.0-rc.1","keywords":["frontmcp","mcp","model-context-protocol","result-handles","large-results","pagination","plugin","agentfront"],"author":{"name":"AgentFront","email":"info@agentfront.dev"},"license":"Apache-2.0","_id":"@frontmcp/plugin-result-handles@1.12.0-rc.1","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"homepage":"https://frontmcp.dev/reference/plugins/result-handles","bugs":{"url":"https://github.com/agentfront/frontmcp/issues"},"dist":{"shasum":"7643b149ccf424baa7d9db496bf5b815f08d4e67","tarball":"https://registry.npmjs.org/@frontmcp/plugin-result-handles/-/plugin-result-handles-1.12.0-rc.1.tgz","fileCount":26,"integrity":"sha512-MWWzy6UfPQkiXMGuphWXxOF3ONTZP00IvkZTDpeIjWRBfz81DxplzlHsJ883j05D69EGaM/yTbAehK1I2hl4Hg==","signatures":[{"sig":"MEUCIQDAGBllj5TpoDNAdQ1jPfLslyH1h/v6593JVfSlz8YaUgIgXPcZpWjbeV7RxuhVa0pnBx2uS77qofqk4uwVUF7XTqU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDgZlQXRB7B4U+N6feshbzGJZN40vgOahRv5/7c+tky4gIhAM7o0Uk92HMvPRuMUlbPqqDJjyHviAhdFRfSPUIm5KfK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@frontmcp%2fplugin-result-handles@1.12.0-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84593},"main":"./index.js","type":"commonjs","types":"./index.d.ts","module":"./esm/index.mjs","engines":{"node":">=24.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./esm/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./package.json":"./package.json"},"gitHead":"aa0ad4c9bb60982b2296df50d32973bbed441013","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"803b062f-6b0b-4491-9112-c444b603a1ab"}},"repository":{"url":"git+https://github.com/agentfront/frontmcp.git","type":"git","directory":"plugins/plugin-result-handles"},"_npmVersion":"11.5.1","description":"Result handles plugin for FrontMCP: folds large tool answers into a preview, a shape and a handle, and lets the model read the rest with result_query","directories":{},"sideEffects":false,"_nodeVersion":"24.22.1","dependencies":{"@frontmcp/utils":"1.12.0-rc.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"@frontmcp/sdk":"1.12.0-rc.1","reflect-metadata":"^0.2.2"},"peerDependencies":{"@frontmcp/sdk":"1.12.0-rc.1","@frontmcp/lazy-zod":"1.12.0-rc.1"},"_npmOperationalInternal":{"tmp":"tmp/plugin-result-handles_1.12.0-rc.1_1794405043709_0.14157331027267095","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"@frontmcp/plugin-result-handles","version":"1.12.0","keywords":["frontmcp","mcp","model-context-protocol","result-handles","large-results","pagination","plugin","agentfront"],"author":{"name":"AgentFront","email":"info@agentfront.dev"},"license":"Apache-2.0","_id":"@frontmcp/plugin-result-handles@1.12.0","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"homepage":"https://frontmcp.dev/reference/plugins/result-handles","bugs":{"url":"https://github.com/agentfront/frontmcp/issues"},"dist":{"shasum":"2dfa53f2b482d906bcec4b1baf2b43a594d25806","tarball":"https://registry.npmjs.org/@frontmcp/plugin-result-handles/-/plugin-result-handles-1.12.0.tgz","fileCount":26,"integrity":"sha512-NH7MsQ72NoYCa6Zhsz1TVleVUOwuzJluphfFg10MsANbLZTV467frwE3zWlI+CA+isLov+p9ZjDxpYcBLmyUyQ==","signatures":[{"sig":"MEUCIEfMpZRAxQEIvJfDK0LLgEe3n+B90NqCEJMiP0KVs/ANAiEA4Z3PQ7ezsaGLsJkDGlNanY+ieQ60whUxiBjl3luEb3w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCIuTrkI/vgb+AAoVHyjh/MyQ8UN//AGp8nrVQlDMCkogIgX2NoIDKD3qP3rH4O5KJ3CPvijE+X3TOwiIa7vem2Xl8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@frontmcp%2fplugin-result-handles@1.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84543},"main":"./index.js","type":"commonjs","types":"./index.d.ts","module":"./esm/index.mjs","engines":{"node":">=24.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./esm/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./package.json":"./package.json"},"gitHead":"2b00e7c02fd1547b8071e07470469380bda25abe","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"803b062f-6b0b-4491-9112-c444b603a1ab"}},"repository":{"url":"git+https://github.com/agentfront/frontmcp.git","type":"git","directory":"plugins/plugin-result-handles"},"_npmVersion":"11.5.1","description":"Result handles plugin for FrontMCP: folds large tool answers into a preview, a shape and a handle, and lets the model read the rest with result_query","directories":{},"sideEffects":false,"_nodeVersion":"24.22.1","dependencies":{"@frontmcp/utils":"1.12.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"@frontmcp/sdk":"1.12.0","reflect-metadata":"^0.2.2"},"peerDependencies":{"@frontmcp/sdk":"1.12.0","@frontmcp/lazy-zod":"1.12.0"},"_npmOperationalInternal":{"tmp":"tmp/plugin-result-handles_1.12.0_1794409080332_0.5607440759593851","host":"s3://npm-registry-packages-npm-production"}},"1.12.1":{"name":"@frontmcp/plugin-result-handles","version":"1.12.1","keywords":["frontmcp","mcp","model-context-protocol","result-handles","large-results","pagination","plugin","agentfront"],"author":{"name":"AgentFront","email":"info@agentfront.dev"},"license":"Apache-2.0","_id":"@frontmcp/plugin-result-handles@1.12.1","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"},{"name":"davidmantoon","email":"davidmantoon@gmail.com"}],"homepage":"https://frontmcp.dev/reference/plugins/result-handles","bugs":{"url":"https://github.com/agentfront/frontmcp/issues"},"dist":{"shasum":"7c33011737d1e187e7bcdc9250ca761763cc675a","tarball":"https://registry.npmjs.org/@frontmcp/plugin-result-handles/-/plugin-result-handles-1.12.1.tgz","fileCount":26,"integrity":"sha512-wyEtKhWqYY1MtX3p5cOBBvEg3yxA6jCSuscpNcovVww9CzLgg7At/11gnVubAwDMpqfJHrpK6NTR6hmdu0/7vA==","signatures":[{"sig":"MEUCIG5yfGgtvKjeRYfvcQFJyS3LeFhqaMD6VIWFBfCaAih0AiEA1g4JMmGrhGTOQoOJ/H8+qdbSkn4zzCUrPspLG7GpVSc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGq2kg9kXmvO91QeCA4/r4Ru8EdHH5tJnwwDwXViLrWOAiEAxRAN3mTeriijUDM9Z8VM0Ed7e85K9HBa33qewxsqiJM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@frontmcp%2fplugin-result-handles@1.12.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84543},"main":"./index.js","type":"commonjs","types":"./index.d.ts","module":"./esm/index.mjs","engines":{"node":">=24.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./esm/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./package.json":"./package.json"},"gitHead":"163441ed8e823bc935fea9b776a0c4862406973c","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"803b062f-6b0b-4491-9112-c444b603a1ab"}},"repository":{"url":"git+https://github.com/agentfront/frontmcp.git","type":"git","directory":"plugins/plugin-result-handles"},"_npmVersion":"11.5.1","description":"Result handles plugin for FrontMCP: folds large tool answers into a preview, a shape and a handle, and lets the model read the rest with result_query","directories":{},"sideEffects":false,"_nodeVersion":"24.22.1","dependencies":{"@frontmcp/utils":"1.12.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"@frontmcp/sdk":"1.12.1","reflect-metadata":"^0.2.2"},"peerDependencies":{"@frontmcp/sdk":"1.12.1","@frontmcp/lazy-zod":"1.12.1"},"_npmOperationalInternal":{"tmp":"tmp/plugin-result-handles_1.12.1_1794562927591_0.6376079630417653","host":"s3://npm-registry-packages-npm-production"}},"1.12.2":{"_id":"@frontmcp/plugin-result-handles@1.12.2","bugs":{"url":"https://github.com/agentfront/frontmcp/issues"},"dist":{"shasum":"96a9347aec20a659d73da7c7a0ac5985dd3585a0","tarball":"https://registry.npmjs.org/@frontmcp/plugin-result-handles/-/plugin-result-handles-1.12.2.tgz","fileCount":26,"integrity":"sha512-cgK7/u/hxRUEOcTkDsVOwjVwAaZOsoSSdjaNbL2chfZHYdnFvSAz/vUa97Xm5l/Gi4GnXXMEXFn1fsjIpcXsDA==","signatures":[{"sig":"MEUCIQCJOJ891zzvGF8fWFkgRW2+PVPs9PLxDjjsr2+YdlQxBAIgc3kJ4DnxDvto4e/gVMev/6IDonA3oSmyskYSX2A8AQI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDwSutcQdrkEksNApnN3Y5Gv+jupTf9e9RH0rUZE0yLIAiEA1/AHiUfve4CenkRV+xRDzubv23UGztmn9DsfvEJSE4I="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@frontmcp%2fplugin-result-handles@1.12.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84543},"main":"./index.js","name":"@frontmcp/plugin-result-handles","type":"commonjs","types":"./index.d.ts","author":{"name":"AgentFront","email":"info@agentfront.dev"},"module":"./esm/index.mjs","engines":{"node":">=24.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./esm/index.mjs"},"require":{"types":"./index.d.ts","default":"./index.js"}},"./package.json":"./package.json"},"gitHead":"07a9de63e3c7fee4c7b8c53e4fb3a80f1714ba91","license":"Apache-2.0","version":"1.12.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"803b062f-6b0b-4491-9112-c444b603a1ab"}},"homepage":"https://frontmcp.dev/reference/plugins/result-handles","keywords":["frontmcp","mcp","model-context-protocol","result-handles","large-results","pagination","plugin","agentfront"],"repository":{"url":"git+https://github.com/agentfront/frontmcp.git","type":"git","directory":"plugins/plugin-result-handles"},"_npmVersion":"11.5.1","description":"Result handles plugin for FrontMCP: folds large tool answers into a preview, a shape and a handle, and lets the model read the rest with result_query","directories":{},"maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"},{"name":"davidmantoon","email":"davidmantoon@gmail.com"}],"sideEffects":false,"_nodeVersion":"24.22.1","dependencies":{"@frontmcp/utils":"1.12.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"@frontmcp/sdk":"1.12.2","reflect-metadata":"^0.2.2"},"peerDependencies":{"@frontmcp/sdk":"1.12.2","@frontmcp/lazy-zod":"1.12.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/plugin-result-handles_1.12.2_1794690600890_0.9928923092351908"}}},"time":{"created":"2026-11-03T19:44:35.821Z","modified":"2026-11-14T21:10:01.332Z","0.0.0-stage":"2026-11-03T19:44:35.821Z","0.0.1":"2026-11-03T19:46:12.888Z","1.11.0-rc.1":"2026-11-03T19:49:34.965Z","1.11.0-rc.2":"2026-11-03T22:18:41.231Z","1.11.0":"2026-11-03T23:00:43.517Z","1.11.1-rc.1":"2026-11-05T01:29:21.932Z","1.11.1-rc.2":"2026-11-05T19:02:11.085Z","1.11.1":"2026-11-08T10:18:12.808Z","1.11.2":"2026-11-09T00:57:04.719Z","1.11.3":"2026-11-09T19:55:56.860Z","1.12.0-rc.1":"2026-11-11T13:50:43.805Z","1.12.0":"2026-11-11T14:58:00.409Z","1.12.1":"2026-11-13T09:42:07.694Z","1.12.2":"2026-11-14T21:10:01.001Z"},"bugs":{"url":"https://github.com/agentfront/frontmcp/issues"},"author":{"name":"AgentFront","email":"info@agentfront.dev"},"license":"Apache-2.0","homepage":"https://frontmcp.dev/reference/plugins/result-handles","keywords":["frontmcp","mcp","model-context-protocol","result-handles","large-results","pagination","plugin","agentfront"],"repository":{"url":"git+https://github.com/agentfront/frontmcp.git","type":"git","directory":"plugins/plugin-result-handles"},"description":"Result handles plugin for FrontMCP: folds large tool answers into a preview, a shape and a handle, and lets the model read the rest with result_query","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"},{"name":"davidmantoon","email":"davidmantoon@gmail.com"}],"readme":"# @frontmcp/plugin-result-handles\n\nA FrontMCP plugin for tools whose answers are too large to send whole. An answer over a size threshold is kept on the\nserver, and the model gets a preview, a shape and a handle in its place. It then reads only the parts it needs with the\n`result_query` tool: a path, a range or a page, and the fields it wants. A handle works only for the session and the\ncaller it was issued to, and only until its TTL runs out.\n\n[![npm](https://img.shields.io/npm/v/@frontmcp/plugin-result-handles.svg)](https://www.npmjs.com/package/@frontmcp/plugin-result-handles) [![License](https://img.shields.io/npm/l/@frontmcp/plugin-result-handles.svg)](https://github.com/agentfront/frontmcp/blob/main/LICENSE)\n\n## Install\n\n```bash\nnpm install @frontmcp/plugin-result-handles @frontmcp/sdk\n```\n\nRequires Node.js 24 or later. Keep `@frontmcp/sdk` on the same version as this package.\n\n## Usage\n\nRegister the plugin on the app whose answers it should fold, or on `@FrontMcp({ plugins })` for every app. On several\napps, the server lists one `result_query`, and it reads the handles of every app's copy:\n\n```ts\nimport ResultHandlesPlugin from '@frontmcp/plugin-result-handles';\nimport { App } from '@frontmcp/sdk';\n\n@App({\n  id: 'orders',\n  name: 'Orders',\n  tools: [ExportOrdersTool],\n  plugins: [ResultHandlesPlugin.init({ thresholdBytes: 32 * 1024, preview: { items: 2 } })],\n})\nexport class OrdersApp {}\n```\n\nAn answer of 500 orders then reaches the client as:\n\n```json\n{\n  \"preview\": {\n    \"orders\": [\n      { \"id\": 0, \"status\": \"open\" },\n      { \"id\": 1, \"status\": \"shipped\" }\n    ],\n    \"total\": 500\n  },\n  \"shape\": {\n    \"type\": \"object\",\n    \"keys\": {\n      \"orders\": {\n        \"type\": \"array\",\n        \"length\": 500,\n        \"items\": {\n          \"type\": \"object\",\n          \"keys\": { \"id\": { \"type\": \"number\" }, \"status\": { \"type\": \"string\", \"length\": 4 } }\n        }\n      },\n      \"total\": { \"type\": \"number\" }\n    }\n  },\n  \"handle\": \"3f1c2a4e-9b7d-4c1e-8f2a-1b2c3d4e5f60\"\n}\n```\n\nas `structuredContent` and as its text, followed by a line telling the model how to read the rest. The result's\n`_meta['frontmcp/result-handle']` holds `{ handle, bytes, ttlSeconds }`.\n\n## What folds\n\nThe plugin runs on the `fitAnswer` stage of `tools/call`, before the answer budget (`output.budget`), so the budget\nsees the folded answer. An answer folds when all of these hold:\n\n- a client called the tool: a tool calling another with `this.callTool()` gets the whole answer;\n- the answer is one text content, or `structuredContent` with at most one text that only repeats it (as the SDK\n  writes it). Images, audio, resources, several texts, a text beside `structuredContent` that says something else,\n  error results and answers that render a widget are left alone;\n- its data, `structuredContent` or the text, is larger than `thresholdBytes` as UTF-8 JSON;\n- the call has a verified session or an authenticated caller. A stateless anonymous call is left alone, since nobody\n  could read its handle back;\n- `foldPolicy(toolName, answer, context)` returns `true`. `answer` is the `structuredContent`, or the text; a text that\n  is a JSON object or array is parsed, so the policy and `result_query` get the value;\n- the tool's output schema admits the folded form (below).\n\nWhen the store can't keep the answer (Redis is down, say), the answer is sent whole and the plugin logs a warning.\n\n## Tools with an output schema\n\nA client checks `structuredContent` against the `outputSchema` it was listed, so a tool with an output schema folds\nonly when that schema admits `{ preview, shape, handle }`. Add `foldedAnswerSchema` to it as a union member:\n\n```ts\nimport { foldedAnswerSchema } from '@frontmcp/plugin-result-handles';\nimport { Tool, ToolContext, z } from '@frontmcp/sdk';\n\nconst reportSchema = z.object({ orders: z.array(orderSchema), total: z.number() });\n\n@Tool({ name: 'export_orders', inputSchema: {}, outputSchema: z.union([reportSchema, foldedAnswerSchema]) })\nexport class ExportOrdersTool extends ToolContext {\n  /* … */\n}\n```\n\nA Zod schema must accept the folded form with no undeclared key; a JSON Schema (an OpenAPI or remote tool's) must\nvalidate it. A tool whose schema doesn't admit it is sent whole, and the plugin logs a warning naming the tool once.\n\n## `result_query`\n\n| Argument | Description                                                                                                          |\n| -------- | -------------------------------------------------------------------------------------------------------------------- |\n| `handle` | The handle of the folded answer. Required.                                                                           |\n| `path`   | A dot path (`$.orders[2].note`, `orders.2.note`) or a JSON pointer (`/orders/2/note`). The whole answer if left out. |\n| `offset` | Of a list, the first item to read; of a string, the first character.                                                 |\n| `limit`  | How many items (20 by default) or characters (2000 by default) to read.                                              |\n| `page`   | A page of `limit` items, from 1, in place of `offset`.                                                               |\n| `fields` | Keep only these keys of the object, or of each object in the list.                                                   |\n\nIt answers `{ path, value, total?, offset?, nextOffset? }`: `total` is the length of the list or string, and\n`nextOffset` is set while there is more to read. Its errors carry a remedy for the model:\n\n| Code                      | When                                                                                        |\n| ------------------------- | ------------------------------------------------------------------------------------------- |\n| `RESULT_HANDLE_NOT_FOUND` | The handle expired, was never issued, or belongs to another session or caller.              |\n| `RESULT_PATH_NOT_FOUND`   | The path isn't a dot path or a JSON pointer, or names nothing in the answer.                |\n| `RESULT_SLICE_TOO_LARGE`  | The slice is larger than `thresholdBytes`: read fewer items, fewer fields or a deeper path. |\n| `INVALID_INPUT`           | Both `page` and `offset` were given, or an argument is out of range.                        |\n\n## Who can read a handle\n\nA handle is a random UUID, never derived from the answer. It's bound to the call's verified session and, unless the\ncaller is anonymous, to its authenticated subject. A different session or a different caller gets\n`RESULT_HANDLE_NOT_FOUND`, the same answer as for a handle that never existed, and never the data.\n\nThe store never sees the handle. Each answer is encrypted with AES-256-GCM, and both its encryption key and its\nstorage key are derived (HKDF-SHA256) from the handle, the session and the subject. The storage holds nothing readable\nwithout the handle, and a lookup by another session or caller finds no record at all, as for an unknown or expired\nhandle.\n\n## Options\n\n| Option           | Default                    | Description                                                                                                                     |\n| ---------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |\n| `thresholdBytes` | `16384`                    | Answers larger than this fold, and no `result_query` slice is larger. At least 1024.                                            |\n| `ttlSeconds`     | `600`                      | How long a folded answer can be read.                                                                                           |\n| `preview`        | `{ items: 5, chars: 500 }` | The first `items` of each list and `chars` of each string the preview keeps.                                                    |\n| `foldPolicy`     | every answer               | `(toolName, answer, { bytes, fullName, request }) => boolean`: which answers over the threshold fold.                           |\n| `storage`        | `{ type: 'auto' }`         | Where folded answers are kept, passed to `createStorage()` from `@frontmcp/utils`: memory, Redis, Vercel KV, Upstash or SQLite. |\n| `namespace`      | `'result-handles'`         | The key prefix of folded answers in the storage.                                                                                |\n\nInvalid options throw a `ResultHandlesConfigurationError` from `init()`, naming each problem.\n\nWith `storage: { type: 'auto' }` the store is Redis, Vercel KV or Upstash when their environment variables are set,\nand memory otherwise. Memory keeps answers in one process, so use a shared store when the server runs on several\ninstances:\n\n```ts\nResultHandlesPlugin.init({ storage: { type: 'redis', redis: { url: process.env.REDIS_URL } } });\nResultHandlesPlugin.init({ storage: { type: 'sqlite', sqlite: { path: '/var/lib/my-server/results.sqlite' } } });\n```\n\nSQLite needs `@frontmcp/storage-sqlite`. In a browser build (`create()` in a web page, WebMCP), Redis and SQLite\nthrow `BrowserStoreUnavailableError` from `init()`, naming `storage: { type: 'memory' }`: a page has no TCP socket and\nno file. `{ type: 'auto' }` picks memory there.\n\nEach folded answer is kept, encrypted, until its TTL runs out. A memory store holds 1000 answers at most\n(`DEFAULT_MEMORY_MAX_ENTRIES`) and drops the oldest past that; set `storage.memory.maxEntries` to change it, or to `0`\nfor no limit.\n\n## Docs\n\n- [Result handles plugin reference](https://frontmcp.dev/reference/plugins/result-handles)\n- [Plugins and adapters](https://frontmcp.dev/reference/plugins): where to register a plugin\n\n## Related packages\n\n- [`@frontmcp/sdk`](https://www.npmjs.com/package/@frontmcp/sdk): the framework this plugin extends, and the answer\n  budget (`output.budget`) that runs after it\n- [`@frontmcp/utils`](https://www.npmjs.com/package/@frontmcp/utils): `createStorage()`, which builds the store\n\n## Contributing\n\nSource: [`plugins/plugin-result-handles`](https://github.com/agentfront/frontmcp/tree/main/plugins/plugin-result-handles).\nIssues and pull requests are welcome; see\n[CONTRIBUTING.md](https://github.com/agentfront/frontmcp/blob/main/CONTRIBUTING.md).\n\n## License\n\nApache-2.0. See [LICENSE](https://github.com/agentfront/frontmcp/blob/main/LICENSE).\n","readmeFilename":"README.md"}