Most MCP clients make the model babysit a giant wall of raw tools. Caplets turns MCP servers, APIs, and commands into focused capability handles your coding agent can inspect, search, call, filter, join, and summarize in one bounded workflow. Let servers be big. Let the model see what matters.
No reviews yetBe the first to leave a review for Caplets
Maker
📌
Curious where people land on this: should MCP servers get smaller, or should clients get smarter?
Report
progressive disclosure makes sense for keeping the initial context small, but curious about the cost on the other end. if the agent has to inspect a handle before it can call it, does that inspection get cached for the rest of the session, or is it re-inspecting the same caplet every time it comes up in a long multi-step task
Report
Maker
@galdayan Good question, and initially I was seeing that "inspection tax" a lot when initially implemented as purely progressive disclosure. Once moving to code mode as the default, the agent was then able to batch calls and filter results more effectively. This lead to a 72% token reduction on our internal eval (which you can find in the repo)
Report
@ian_pascoe 72% is a big number, nice validation for the code-mode approach. still curious about the caching question specifically though, since that's the difference between a one-time inspection cost per session vs. a recurring cost that scales with how often the agent revisits the same caplet in a long task. is that on the roadmap or already handled somewhere I'm missing
Report
Maker
@galdayan it is a big number and I'm very proud to report it. In terms of caching and session reuse, it can be very effective. As the agent learns the interface in a session it becomes more efficient because it doesn't need to rediscover how to use the API (it already has it in context). Caplets code mode also acts as a REPL, where the agent can define functions and variables that it can reuse during the session. This reduces repetition even further. For example: if you give the agent the GitHub caplet, it can create a function for fetching all the review comments on a PR and continue to reuse it over the entire session. It's pretty neat!
Report
how does the filtering and joining actually work under the hood, is the agent deciding which capabilities to call or is there some deterministic routing happening before the model sees anything
Report
Maker
@sudenuriskr5xt All the model sees at the start is a code_mode tool with compact typescript declarations for each configured caplet. Caplets can then be "inspected" by the agent, revealing tool call signatures and input/output schemas, allowing the agent to progressively disclose a caplet based on it's needs. If you want to see more, you can look at the generated .d.ts file in the repo for caplet handles, this is what the agent sees to start: https://github.com/spiritledsoftware/caplets/blob/main/packages/core/src/code-mode/runtime-api.d.ts
Report
How does Caplets handle updates when an MCP server adds new tools — does the agent pick them up automatically or do you need to refresh the capability set manually?
Report
Maker
@muzaffer482690 Unfortunately this varies by harness. Harnesses that can handle MCP tool updates will receive them (opencode, pi, claude), others may not. It is worth looking into whether your harness supports it. Codex, for example, does not, even though caplets does send tool update responses.
Report
A built-in way to share a curated set of caplets between teammates would be huge. Right now I can imagine recreating the same focused toolset across projects getting tedious, so a small importable bundle or versioned preset would save a lot of setup time and keep the model calling the same sensible defaults everywhere.
Report
Maker
@aleyna6ucd This is a great idea! Please open a GitHub issue with this feature request. Currently caplets can be discovered/shared through catalog.caplets.dev. It works similar to skills.sh where once a caplets is installed, it is indexed by the catalog.
progressive disclosure makes sense for keeping the initial context small, but curious about the cost on the other end. if the agent has to inspect a handle before it can call it, does that inspection get cached for the rest of the session, or is it re-inspecting the same caplet every time it comes up in a long multi-step task
@galdayan Good question, and initially I was seeing that "inspection tax" a lot when initially implemented as purely progressive disclosure. Once moving to code mode as the default, the agent was then able to batch calls and filter results more effectively. This lead to a 72% token reduction on our internal eval (which you can find in the repo)
@ian_pascoe 72% is a big number, nice validation for the code-mode approach. still curious about the caching question specifically though, since that's the difference between a one-time inspection cost per session vs. a recurring cost that scales with how often the agent revisits the same caplet in a long task. is that on the roadmap or already handled somewhere I'm missing
how does the filtering and joining actually work under the hood, is the agent deciding which capabilities to call or is there some deterministic routing happening before the model sees anything
@sudenuriskr5xt All the model sees at the start is a code_mode tool with compact typescript declarations for each configured caplet. Caplets can then be "inspected" by the agent, revealing tool call signatures and input/output schemas, allowing the agent to progressively disclose a caplet based on it's needs. If you want to see more, you can look at the generated .d.ts file in the repo for caplet handles, this is what the agent sees to start: https://github.com/spiritledsoftware/caplets/blob/main/packages/core/src/code-mode/runtime-api.d.ts
How does Caplets handle updates when an MCP server adds new tools — does the agent pick them up automatically or do you need to refresh the capability set manually?
@muzaffer482690 Unfortunately this varies by harness. Harnesses that can handle MCP tool updates will receive them (opencode, pi, claude), others may not. It is worth looking into whether your harness supports it. Codex, for example, does not, even though caplets does send tool update responses.
A built-in way to share a curated set of caplets between teammates would be huge. Right now I can imagine recreating the same focused toolset across projects getting tedious, so a small importable bundle or versioned preset would save a lot of setup time and keep the model calling the same sensible defaults everywhere.
@aleyna6ucd This is a great idea! Please open a GitHub issue with this feature request. Currently caplets can be discovered/shared through catalog.caplets.dev. It works similar to skills.sh where once a caplets is installed, it is indexed by the catalog.
https://github.com/spiritledsoftware/caplets/issues