flutter3d_mcp_kit 0.7.1
flutter3d_mcp_kit: ^0.7.1 copied to clipboard
What every flutter3d MCP server shares: a table of tools that are their own handlers, answers that refuse without failing, and a loopback HTTP transport a running application can offer a session over.
0.7.1 #
Released with the rest of the stack at 0.7.1. Nothing in this package changed. The release it resolves against builds from pub.flutter-io.cn again and no longer crashes Metal on the first unlit draw.
Its flutter3d_* dependencies ask for ^0.7.1.
0.7.0 #
- The first publication. The 0.6.0 below was a number carried inside the
workspace and never reached pub.flutter-io.cn. 0.7.0 is the number the whole shelf
goes out on, so that one number names one tree and
^0.7.0on anyflutter3d_*package resolves against every other;doc/boundary-0.7.0.mdlists the thirteen packages that begin here. Three servers depend on this one:flutter3d_model_mcp,flutter3d_editor_mcpandflutter3d_sim_mcp. - The names the entry below describes without naming.
OfferedTool<S, A>(tool, run)is a tool and its handler as one value, andrunmay return aFuture.ToolTableServer<S, A>registers a list of them over onesessionand turns each answer into a result withtoResult.Answeris({bool did, String says})andPictureAnsweradds a nullablepng;resultOfandpictureResultOfmake the results, withisErrorset whendidis false.LoopbackMcpServer.startbinds 127.0.0.1 only, takes one JSON-RPC message per POST and wants a bearer token of 32 random bytes;writeMcpSessionFileanddeleteMcpSessionFilekeep the{port, token}file a client finds it by. - A wrong argument is refused by name. With
refusalgiven,ToolTableServerswitches offdart_mcp'svalidateArgumentsand runsrefuseArguments(tool, arguments)first. It answers a sentence for an unknown key, saying which keys the tool does take, and then for the first schema error: an enum miss, a wrong type, a wrong item count, a number out of range, a missing required key. The sentence comes back as an ordinary error result the model can act on. Withoutrefusalthe framework's own check runs as before. pausedBecause: the person stays in charge. A function asked before every call; a non-null sentence is returned as the refusal and the tool does not run. It is asked ahead of the argument check, since a complaint about a misspelt key is a strange answer to "you are paused". It is consulted only on a server that was also givenrefusal, because that is what builds the answer.onCallandonInitialize, for whoever is watching.onCall(toolName, arguments, answer, elapsed)runs after each tool andonInitialize(clientName)when a client connects. An exception thrown by either is swallowed: a re-sync inside the hook once threw for one object a device had refused, and the answer, already computed and correct, reached the agent as a stack trace, for that call and every one after it. The stopwatch is started only whenonCallis set, so a headless server never reads the clock.- Prompts.
OfferedPrompt(name:, description:, text:)and thepromptslist;prompts/gethands back the text as one user message. A prompt here takes no arguments.ToolTableServermixes inPromptsSupportfor it. - Plain Dart on
dart_mcp>=0.5.2 <0.6.0andstream_channel^2.1.4, with no sibling dependency.loopback_http.dartimportsdart:io.
0.6.0 #
- The arrangement four servers each wrote, written once. A tool paired with its handler, a server that registers a list of them over one session, the two shapes of answer and the functions that turn them into results, and the loopback HTTP transport that used to belong to the modeller's server alone.