Conversation
Proposes replacing vMCP's declarative composite tools system (DAG + Go templates) with a Starlark scripting engine for multi-step tool workflows. Starlark provides iteration, conditional branching, dynamic dispatch, and data transformation while maintaining sandboxed execution with no arbitrary I/O. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove V2 session incompatibility bullet (temporary concern) - Remove V1/V2 session goal (not relevant to RFC scope) - Add parallel execution to Goals section - Remove migration tooling phase (unnecessary) - Remove fuzz tests from testing strategy (unnecessary) - Simplify migration path (3 phases instead of 4) - Add docs-website to documentation requirements - Resolve naming question: scripted and composite are interchangeable - Remove json.encode/decode open question Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Starlark's sandbox makes it feasible for agents to dynamically compose and submit scripts to vMCP at runtime — something a declarative YAML DSL could never support safely. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Six practical examples covering structured data manipulation, returning structured data, JSON-as-string parsing from legacy servers, fan-out with parallel, error handling patterns, and elicitation. Includes a callout explaining when to use dict indexing (tool results) vs attribute access (builtin return values). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
This RFC is incredible! Seems like I'm the first human reviewer and considering that, honestly I'm impressed by how thorough it already is! I do have some thoughts but honestly, none of them are blockers, I just wanted to give more than a "Looks good to me". I did have to scrape the barrel to think of some things that might be actionable:
|
|
Thanks for the thoughtful review @kantord 😄
This is an important thing to call out. I think it can be solved by building an implementation of Iterable. That would look like something within vMCP recognizes "hey, this is a huge array / dict / paginated response. Let's turn it into an
Can you say more about what you're imagining? I'm not that familiar with MCP apps.
Yes, that makes perfect sense. If you want a http tool, users could add a fetch tool.
Yea, I could see it getting hairy too. If we get to the point people (or agents) are writing so much code that we think reuse is important, then that's a good problem to have. I like the ideas you have though. Let's wait until this problem needs more attention.
Yes, it could be frustrating, especially with the schemas of the underlyling MCP servers potentially changing. Some thoughts here:
I think this is another thing where we have to wait for the problem to arise to know what solution is justified. |
Summary
Proposes replacing vMCP's declarative composite tools system (DAG + Go templates) with a Starlark scripting engine for multi-step tool workflows.
The current composite tools system hits hard limits: no iteration over results, no dynamic branching, and awkward Go template data flow. Starlark provides iteration, conditional branching, dynamic tool dispatch, and data transformation while maintaining sandboxed execution with no arbitrary I/O.
Key design decisions:
call_tool()halts on error (common case),try_call_tool()returns error info (opt-in handling) — works around Starlark's lack of try/exceptcall_tool,try_call_tool,retry,elicit,parallel,logload(): Shared helper libraries in.starfilesWhy Starlark
🤖 Generated with Claude Code