Reference Cross-tool conventions for the FrameworX MCP SDK , the surfaces it ships, and the tooling extension model— build-visibility propagation from the compile engine into every write-capable MCP tool response.
AI Integration → MCP SDK Reference
FrameworX has always compiled user-authored .NET (Script Tasks, Script Classes, Script Expressions, and Displays code-behind) incrementally as objects are saved, and RuntimeBuildAndPublish in Designer has always produced a per-object error table. What is new in 10.1.5
(solution, profile).is that this compile output is now propagated into MCP tool responses, so AI agents see the same build feedback an engineer sees in the Designer Output pane.
This page defines the shared build block once. Sibling pages (designer_action Reference and ConsoleMCP Reference) reference this shape instead of redefining it.
| Table of Contents | ||||||
|---|---|---|---|---|---|---|
|
The FrameworX compile engine is unchanged in 10.1.5. No new compiler, no new validation passes, no new error categories. The MCP SDK is a thin adapter over product capability — when the product gains a signal worth exposing, the adapter routes it; when the product lacks a signal, the adapter does not fabricate one. Build visibility follows this principle: the compile output already existed inside Designer and inside the produced .dbsln; the 10.1.5 work was to surface it to MCP callers.
Practically, this means the build block described below is drawn from the same internal sources an engineer already consults — the incremental compile result held by the Designer save pipeline, the error columns on the four *Contents tables in the solution file, and the per-object diagnostics produced by RuntimeBuildAndPublish.
build BlockAll MCP tools that report compile output return the same JSON shape. The shape is stable across DesignerMCP, ConsoleMCP, and the new verify_solution_file tool.
| Code Block | ||
|---|---|---|
| ||
{
"objects": [
{
"type": "Script|Display",
"name": "<object name>",
"status": "ok|error",
"diagnostics": [
{ "line": <int>, "msg": "<string>" }
],
"elapsedMs": <int>
}
],
"summary": {
"built": <int>,
"failed": <int>,
"skipped": <int>,
"timestamp": "<ISO8601>"
}
}
|
| Field | Meaning |
|---|---|
objects[].type | Either Script (covers the three Scripts tables) or Display. |
objects[].name | Name of the compiled object, as it appears in the owning table. |
objects[].status | ok if the incremental compile produced no diagnostics, error otherwise. |
objects[].diagnostics[] | Zero or more entries, each with a source line number and a compiler message. Empty array when status is ok. |
objects[].elapsedMs | Compile time for that object in milliseconds. |
summary.built | Count of objects whose status is ok. |
summary.failed | Count of objects whose status is error. |
summary.skipped | Count of objects not compiled in this run (for example, unchanged objects when rebuild_all=false). |
summary.timestamp | ISO-8601 timestamp of the build run. |
Four tables carry user-authored .NET and participate in the build pipeline:
| Table | Carries |
|---|---|
ScriptsTasks | Background script tasks. |
ScriptsClasses | Named script classes reusable across the solution. |
ScriptsExpressions | Reusable compiled expressions. |
DisplaysList | Display code-behind. |
A write that touches a row in any other table does not produce a build block (there is nothing to compile). A write that touches a row in one of these four tables carries per-row compile feedback in its response.
| Surface | Mechanism | Reference |
|---|---|---|
DesignerMCP designer_action('build', …) | Returns a full build block from RuntimeBuildAndPublish. | designer_action Reference |
DesignerMCP write_objects | Each affected row in the response carries a compile field populated from the save-time incremental compile. | designer_action Reference |
DesignerMCP get_objects(detail='full') | Each row of the four affected tables carries a lastCompile field from the most recent compile. | designer_action Reference |
DesignerMCP SolutionContext / RefreshContext | A compact build_state section reports last-build pass/fail counts and timestamp. | designer_action Reference |
ConsoleMCP create_solution_file / update_solution_file | Response includes the build block read from the produced .dbsln. | ConsoleMCP Reference |
ConsoleMCP verify_solution_file | New tool. Opens a current-version .dbsln and returns Name inventory plus the build block. | ConsoleMCP Reference |
DesignerMCP draws the build block from the live Designer compile pipeline — the same path that populates the Output pane when an engineer saves a script or runs RuntimeBuildAndPublish.
ConsoleMCP has no live Designer. It reads the same information directly from the produced solution file. A .dbsln is a SQLite database; each of the four affected tables has a companion *Contents table (ScriptsTasksContents, ScriptsClassesContents, ScriptsExpressionsContents, DisplaysListContents) whose error columns hold the compile result written at build time. ConsoleMCP queries those columns and assembles the build block. This is not stdout parsing of SolutionCreator logs — it is a direct read of the compiled result persisted inside the .dbsln.
A well-behaved agent writes, reads the compile field on the response, and stops on the first error status rather than piling up additional writes on a broken tree. Typical loop:
| Code Block | ||
|---|---|---|
| ||
1. write_objects([...]) # Designer or Console
2. inspect response[i].compile.status # for each affected row
3. if any status == "error":
fix the offending diagnostics and retry
else:
proceed to the next batch
4. at commit boundary (Designer): designer_action('build', rebuild_all=true)
at commit boundary (Console): create_solution_file / update_solution_file
5. inspect summary.failed; stop if > 0
|
The commit-boundary step is what catches cross-object breakage (an edit to a Script Class that breaks a Script Task referencing it): the row-level compile on a single write only reports what the incremental pipeline saw for that object; the commit-boundary build reports the whole tree
The FrameworX MCP SDK is the .NET library Tatsoft uses to expose Designer, workspace, and runtime tools to MCP clients (Claude Desktop, Claude Code, VS Code GitHub Copilot, any MCP-compatible LLM). It is layered on top of the Anthropic MCP SDK for .NET and ships as seven compiled server executables across three families — Designer, Console, and Runtime — each targeting a specific workflow.
Setup steps are covered in MCP and Claude Setup and Claude Code MCP Setup. Tool-level reference lives in the dedicated pages listed below.
| Table of Contents | ||||||
|---|---|---|---|---|---|---|
|
The SDK ships seven servers across three families. Each one is a distinct executable with its own process, transport, and tool surface.
Server | Purpose | Transport | Executable |
|---|---|---|---|
DesignerMCP | Live IDE co-pilot on the same Windows machine as Designer. | stdio |
|
DesignerMCPHttp | Live IDE co-pilot over HTTP, for split-host setups (Mac + Windows VM). | HTTP (SSE) on port |
|
ConsoleMCP | File-based workspace engineering, no running Designer. | stdio |
|
ConsoleMCPHttp | File-based workspace engineering over HTTP. | HTTP (SSE) on port |
|
RuntimeMCP | Read live tags, alarms, historian, and UNS from a running TServer. | stdio |
|
RuntimeMCPHttp | Same runtime surface over HTTP. Supports target rebinding and multi-runtime setups. | HTTP (SSE) on port |
|
RuntimeMCPHttpService | Windows Service wrapper that starts and stops | N/A (launches subprocess) |
|
The HTTP servers add bearer-token authentication and DNS rebinding protection defaults suitable for Parallels-internal Mac-to-Windows networks. Use a reverse proxy if you expose the HTTP surface beyond a trusted subnet.
The HTTP servers use a fixed default port. The full reserved range — including the block reserved for Tatsoft internal MCP tooling — is documented here so that custom integrations and remote setups do not collide with future additions.
Port | Server | Notes |
|---|---|---|
| RuntimeMCPHttp | Live runtime MCP. Configurable in |
| DesignerMCPHttp | Live IDE Designer MCP. Configurable in |
| ConsoleMCPHttp | File-based workspace MCP. Configurable in |
| Reserved | Reserved for Tatsoft internal MCP tooling used by Tatsoft staff. Customer integrations should avoid this block to stay forward-compatible with future shipped tools. |
To run multiple instances of an HTTP server on the same host (for example, one runtime per execution profile), pass /ListenPort:N on the command line, or set per-instance appSettings.ListenPortN keys with the instance suffix in the JSON config. See Runtime MCP Reference for the multi-runtime pattern.
FrameworX version | Runtime | Install path |
|---|---|---|
10.1.4 and earlier | .NET 8 Desktop Runtime |
|
10.1.5 and later | .NET 10 Desktop Runtime |
|
Verify with dotnet --list-runtimes. A mismatched runtime surfaces as the server failing to start under Claude Desktop or Claude Code.
Exception: RuntimeMCPHttpService targets .NET Framework 4.8 because it uses System.ServiceProcess for Windows Service Control Manager integration. It launches RuntimeMCPHttp.dll (net10.0) as a child process at service start, so the .NET 10 runtime is still required on the host.
Every server speaks JSON-RPC 2.0 over its transport. The SDK framing rules follow the MCP 1.2 streamable-HTTP specification for the HTTP servers and the stdio specification for the stdio servers.
The MCP client spawns the server as a subprocess. stdin carries requests, stdout carries responses, stderr is reserved for logging. Environment variables set on the client process flow to the server.
The server listens on its configured port. The client negotiates a session over POST /sse and then streams events over GET /sse. Authorization is Authorization: Bearer <token>. The token is configured in %APPDATA%\FrameworX\Mcp\config.json on first run.
Each tool-level reference lives on its own page.
The SDK is NOT a public plug-in surface. Tools are compiled into the shipped executables and are not loaded from user-supplied assemblies. The extension path for customer-specific behavior is via Claude Skills (markdown playbooks loaded by the MCP client) and via search_docs, both of which run on top of the existing tool catalog.
For customer-specific automation via scripts and expressions, see Skill Scripts Expressions.
FrameworX
Anthropic MCP SDK
Notes
10.1.3
1.0
Initial ship of DesignerMCP and DesignerMCPHttp.
10.1.4
1.1
ConsoleMCP and ConsoleMCPHttp added. RuntimeMCP (stdio) added with the initial runtime tool surface.
10.1.5
1.2
*_workspace tool names, create_solution_file, update_solution_file, from_workspace parameter). RuntimeMCPHttp, RuntimeMCPHttpService, and (solution, profile) target rebinding added.
| Page Tree | ||
|---|---|---|
|