Turbo C MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Turbo C MCP Servercompile and run hello.c"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐พ What is this?
Turbo C MCP Server hands your AI assistant a genuine Borland Turbo C 3.0 toolchain over the Model Context Protocol. Your LLM doesn't simulate C anymore โ it compiles and runs the real thing on the same 16-bit compiler a generation of programmers grew up on, and gets back true output, real Borland diagnostics, and cycle-accurate timing.
Ask Claude to "write a prime sieve in C and run it" โ and it actually does, on
TCC.EXE. Errors are real.exit 0is earned.
flowchart LR
A["๐ง LLM / Claude"] -- MCP stdio --> B["โ๏ธ turboc-mcp-server"]
B -- TCC.EXE --> C["๐ Borland Turbo C 3.0"]
C -- .EXE --> D["๐ฅ๏ธ DOS runtime / DOSBox"]
D -- stdout ยท exit code ยท timing --> B
B -- structured result --> A
style A fill:#00c853,stroke:#eafff3,color:#04150d
style B fill:#0b3d2e,stroke:#00e5ff,color:#eafff3
style C fill:#ffb300,stroke:#0b0f14,color:#0b0f14
style D fill:#37474f,stroke:#00e5ff,color:#eafff3Related MCP server: embedcalc-mcp
โจ Why it goes further than "run my C"
๐ It's a studio, not a button
Twelve composable tools: compile-only checks, a static analyzer that runs without a compiler, an error explainer, an assembly disassembler, a benchmark harness, and a self-healing doctor.
๐ง Structured, model-friendly output
Every compile is parsed into error/warning objects with file + line, so
your LLM can fix code surgically instead of squinting at raw logs.
๐ฎ Batteries + nostalgia included
A built-in library of 12 classic programs โ Fibonacci, prime sieve, Towers
of Hanoi, BGI graphics, conio colors โ exposed as MCP resources.
๐ฆ Runs on modern Windows
16-bit TCC.EXE can't run on 64-bit Windows? The included DOSBox bridge
wrappers make compile and run work anywhere. One env var each.
๐ Quick Start
1 ยท Prerequisites
Node.js โฅ 18
Borland Turbo C 3.0 at
C:\TURBOC3(or setTURBOC_ROOT)64-bit Windows? Also grab DOSBox โ see DOSBox setup
2 ยท Install & build
git clone https://github.com/BBSRguy/turboc-mcp-server.git
cd turboc-mcp-server
npm install
npm run build3 ยท Wire it into your MCP client
{
"mcpServers": {
"turboc": {
"command": "node",
"args": ["C:/path/to/turboc-mcp-server/build/server.js"],
"env": {
"TURBOC_ROOT": "C:\\TURBOC3"
// On 64-bit Windows, add the DOSBox bridge (see docs/DOSBOX.md):
// "TCC_COMMAND": "C:\\TURBOC3\\wrappers\\dosbox-tcc.bat",
// "MCP_C_RUN_COMMAND": "C:\\TURBOC3\\wrappers\\dosbox-run.bat"
}
}
}
}claude mcp add turboc -- node C:/path/to/turboc-mcp-server/build/server.js4 ยท Say hello
You: "Use turboc to run the
helloexample." AI: callsrun_exampleโHello, Turbo C! Compiled on real DOS iron.โexit 0
Not sure it's wired up? Ask it to run environment_doctor โ it verifies your
whole toolchain and tells you exactly what's missing.
๐งฐ The toolbox (12 tools)
# | Tool | What it does |
1 | ๐ข | Compile with |
2 | ๐ | Compile-only syntax/semantic check โ fast, no execution |
3 | ๐งช | Static analysis without compiling: |
4 | ๐ | Plain-English cause + fix for any Turbo C compiler / linker / runtime message |
5 | โ๏ธ | Emit the 16-bit x86 assembly listing ( |
6 | ๐ | Browse the classic-program library (filter by category) |
7 | ๐ | Fetch the full source of any example |
8 | โถ๏ธ | Compile and run an example in one shot |
9 | โฑ๏ธ | Run the program N times; report min / avg / max ms |
10 | ๐จ | Re-indent by brace depth, tidy whitespace โ zero deps |
11 | ๐ฉบ | Verify |
12 | ๐งน | Sweep old scratch sessions; keep the N most recent |
Plus MCP resources (turboc://environment, turboc://examples/*) and
prompts (debug-c-error, optimize-c, explain-program).
๐ฎ Examples
The bundled library (list_examples) covers every corner of the DOS C world:
Category | Programs |
๐ฉ basics |
|
๐งฎ algorithms |
|
๐จ graphics |
|
๐ฝ dos |
|
๐ data |
|
๐น fun |
|
โถ run_example { "id": "prime-sieve" }
Compile: โ success (312 ms, exit 0)
=== Run phase ===
Result: โ exit 0 (44 ms)
--- program stdout ---
Primes up to 100:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97โ๏ธ Configuration
Everything is environment-driven, so one build works on every setup.
Variable | Default | Purpose |
|
| Turbo C install root |
|
| Compiler entry point (or a DOSBox |
| (unset) | Wrapper to launch the compiled |
|
| Header search path |
|
| Library search path |
|
| BGI graphics drivers |
|
| Scratch directory for sessions |
|
| Per-run execution timeout |
|
| Per-compile timeout |
|
| Output cap returned to the model |
๐ Architecture
graph TD
S[server.ts<br/>tools ยท resources ยท prompts] --> T[turboc.ts<br/>compile ยท run ยท asm ยท doctor]
S --> A[analyze.ts<br/>heuristic linter]
S --> E[errors-db.ts<br/>error knowledge base]
S --> X[examples.ts<br/>classic programs]
S --> F[format.ts<br/>C reformatter]
T --> D[diagnostics.ts<br/>parse TCC output]
T --> U[util.ts<br/>spawn ยท timeout ยท shell bridge]
T --> C[config.ts<br/>env-driven paths]
style S fill:#00c853,stroke:#04150d,color:#04150d
style T fill:#0b3d2e,stroke:#00e5ff,color:#eafff3Clean, single-responsibility modules โ easy to read, easy to extend.
๐บ Roadmap
Multi-file / project compilation
BGI graphics โ PNG capture via DOSBox screenshots
Turbo Assembler (
TASM) round-tripMemory-model presets (
tiny/small/large) as first-class optionsnpm one-line install (
npx turboc-mcp-server)Watch mode + hot examples gallery on the website
Ideas welcome โ open an issue or PR.
๐ค Contributing
PRs are warmly welcome. Fork โ branch โ npm run build โ PR. New examples and
error-DB entries are especially appreciated; see CONTRIBUTING.md.
โญ Star history
If this brought a little 1992 magic to your AI, drop a โญ โ it genuinely helps.
๐ค Author
BBSRguy ยท @BBSRguy ยท rasran90@yahoo.com
Built for everyone who still hears the clrscr() flicker in their dreams. ๐น๏ธ
Available Tools
12 toolsanalyze_codeA
Static analysis of C source WITHOUT compiling: flags unsafe gets(), scanf-missing-&, assignment-in-if, unbalanced braces, missing main(), unchecked malloc, Turbo C float I/O pitfalls, and more. Instant, no toolchain required.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | C source code. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It states the tool does not compile and is instant, but does not mention side effects (e.g., no code modification, no data persistence). The description is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with purpose, and efficiently lists specific checks in a single sentence. Every part earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does not describe the format of the analysis results (e.g., list of warnings). It only says 'flags' issues. While the tool's purpose is clear, the missing output format is a gap given the one input parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'code,' described as 'C source code.' The description adds no additional meaning beyond the schema, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs static analysis of C source code without compiling, lists specific issues it detects (e.g., unsafe gets(), missing main()), and distinguishes from sibling tools like compile_and_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'WITHOUT compiling' and 'Instant, no toolchain required,' providing clear context for when to use this tool instead of compilation-based alternatives. However, it does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
benchmarkA
Compile once, then run the program N times (default 5) and report min/max/avg execution time in milliseconds. Useful for comparing algorithm variants on the real DOS runtime.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | C source code. | |
| runs | No | Number of runs (1โ50, default 5). | |
| stdin | No | Optional stdin fed to each run. | |
| filename | No | Optional file name; normalized to DOS 8.3 (.C). Default MAIN.C. | |
| extraCompilerArgs | No | Optional extra Turbo C flags, e.g. ['-ms','-w-','-O']. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It explains the compilation-once-then-multiple-runs behavior and the output metrics. However, it does not describe error handling (e.g., compilation failure) or the exact format of the report, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that efficiently convey the core workflow, default behavior, and use case. No filler or redundant information. Front-loaded with the key action (compile once, run N times).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is fairly simple: compile, run, report. The description covers the main workflow and output. However, it lacks details on error behavior (compile errors) and the exact structure of the reported numbers. With no output schema, more explicit output description would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameter descriptions are present. The description adds only a default for runs (already in schema) and mentions filename normalization (also in schema). No additional semantic value beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compiles once, runs N times, and reports min/max/avg execution time. The verb 'benchmark' is specific to repeated timing, and the description distinguishes it from siblings like compile_and_run by emphasizing multiple runs and statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Useful for comparing algorithm variants on the real DOS runtime,' which gives clear guidance on when to use it. It does not mention alternative tools or when not to use, but the context with siblings makes the use case sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clean_workspaceA
Delete old scratch session directories created by compiles/runs. Optionally keep the N most recent. Frees disk and keeps the DOS work root tidy.
| Name | Required | Description | Default |
|---|---|---|---|
| keep | No | Keep the N most recent sessions (default 0 = remove all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, leaving full burden on description. It discloses the destructive action (delete), but does not mention safety, permissions, reversibility, or impact on active sessions. Basic transparency is present but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states the primary action, second adds optional parameter and benefit. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (1 parameter, no output schema), the description covers key aspects: what it deletes, optional behavior, and benefit. Missing details about return value or edge cases, but adequate for the scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one numeric parameter 'keep'. The description adds the default value (0 = remove all) and clarifies the behavior ('keep N most recent'), enhancing schema information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete', the resource 'old scratch session directories', and the optional parameter. It distinguishes from sibling tools by focusing on cleanup of temporary compilation artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (to free disk and keep workspace tidy) but lacks explicit guidance on when not to use or alternative approaches. Sibling tools suggest different purposes, so context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compile_and_runA
Compile C code with Borland Turbo C (TCC.EXE) and run the resulting DOS executable, capturing stdout/stderr, exit code, timing, and structured diagnostics. The everyday workhorse.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | C source code. | |
| stdin | No | Optional stdin fed to the program at runtime. | |
| filename | No | Optional file name; normalized to DOS 8.3 (.C). Default MAIN.C. | |
| extraCompilerArgs | No | Optional extra Turbo C flags, e.g. ['-ms','-w-','-O']. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the core behavior: compiles, runs, captures output and diagnostics. It does not mention side effects like file creation or cleanup, but for a compile-and-run tool this is acceptable. The description is accurate and avoids contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the key action and outputs, and a concise characterization. Every word serves a purpose; no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool, no output schema, and fully documented parameters, the description is complete enough. It covers the result (captured outputs) and the main inputs. Missing details like system prerequisites or error handling are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the tool description does not need to add much. The description contextualizes the parameters (e.g., stdin fed at runtime) but does not provide additional meaning beyond what each parameter's description already states. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compiles C code with Borland Turbo C and runs the resulting DOS executable, capturing stdout/stderr, exit code, timing, and diagnostics. It distinguishes from siblings like compile_check (only compilation) and run_example (runs existing examples) by emphasizing the full compile-and-run workflow as 'the everyday workhorse'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the primary compile-and-run tool but does not provide explicit when-to-use or when-not-to-use guidance. Sibling tools like compile_check and run_example exist, but no context is given for choosing between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compile_checkA
Compile-only syntax/semantic check (no execution). Returns structured errors and warnings with line numbers โ perfect for fast iteration and CI-style validation.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | C source code. | |
| filename | No | Optional file name; normalized to DOS 8.3 (.C). Default MAIN.C. | |
| extraCompilerArgs | No | Optional extra Turbo C flags, e.g. ['-ms','-w-','-O']. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description clearly states the tool does not execute code and returns structured errors/warnings with line numbers. This is transparent for a non-destructive check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded and contains no superfluous words. Every part is meaningful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description covers the return value (structured errors/warnings with line numbers). It is complete for a compile-check tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are documented. The description adds minor detail (normalized to DOS 8.3) but does not significantly enhance understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs a compile-only syntax/semantic check without execution and returns structured errors/warnings with line numbers. This differentiates it from siblings like compile_and_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says it is 'perfect for fast iteration and CI-style validation,' implying use cases. It does not explicitly mention when not to use or contrast with all siblings, but the sibling list provides context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
environment_doctorA
Inspect the Turbo C toolchain: verify TCC.EXE, INCLUDE, LIB, and BGI paths, count available headers, report workspace sessions, and list any problems with fix hints. Run this first if compiles fail.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses all behavioral traits: inspection, verification, counting, reporting, and listing problems with fix hints. It implies no side effects, which is appropriate for a diagnostic tool. No annotations were provided, so the description carries the full burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action. Every sentence provides essential information without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description fully covers the tool's behavior and context. It specifies what is inspected, what is reported, and when to use it, making it complete for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so schema coverage is trivially 100%. The description adds no parameter info because none are needed. Baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's purpose: inspect the Turbo C toolchain, verify paths, count headers, report sessions, and list problems with fix hints. It uses specific verbs and resources, distinguishing it from sibling tools like compile_and_run or analyze_code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes clear usage guidance: 'Run this first if compiles fail.' This implies when to use it (before other tools upon compilation failure), though it lacks explicit exclusion of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_errorA
Look up a Turbo C / Borland compiler, linker, or runtime message and get a plain-English cause + concrete fix. Feed it the raw error text (e.g. "Undefined symbol 'x' in function main").
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | The compiler/linker/runtime message to explain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the output includes a plain-English cause and concrete fix. This is adequate for a lookup tool, though it does not detail any limitations or edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first states the purpose and output format, the second gives a concrete usage example. No wasted words, front-loaded with essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one required parameter, no output schema, and straightforward behavior, the description fully covers what the tool does and how to use it. It explains the return value (cause + fix) adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with a description of the 'message' parameter. The description adds value by instructing to feed the raw error text and providing an example, enhancing the semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool looks up compiler/linker/runtime messages and provides a plain-English cause and fix. It specifies the resource (Turbo C / Borland errors) and verb (look up), distinguishing it from siblings like compile_and_run or analyze_code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to use the tool: 'Feed it the raw error text' with an example. It does not explicitly state when not to use or compare to alternatives, but the context is clear enough for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format_codeA
Reformat C source: re-indent by brace depth, tidy trailing whitespace, and collapse blank-line runs. Dependency-free; returns the formatted code.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | C source code. | |
| indent | No | Spaces per level (default 4). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool returns formatted code and is dependency-free. However, it does not explicitly state whether the original input is modified or preserved, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that are front-loaded with the action and resource. Every word serves a purpose with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple formatting tool with two parameters and no output schema, the description is sufficient. It explains the actions and return value clearly. Could optionally mention that the original code remains unchanged, but it is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description adds value by explaining what the reformatting entails (brace-depth indentation, trailing whitespace, blank-line runs) beyond the schema's brief parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'reformat' and the resource 'C source'. It specifies the actions: re-indent by brace depth, tidy trailing whitespace, and collapse blank-line runs. This distinguishes it from siblings like compile_and_run or analyze_code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. It mentions it is 'dependency-free' and returns code, but does not offer context for proper usage or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_asmA
Compile C to a Turbo C assembly listing (TCC -S) and return the generated .ASM. Great for teaching how C maps to 16-bit x86, inspecting codegen, or optimization study.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | C source code. | |
| filename | No | Optional file name; normalized to DOS 8.3 (.C). Default MAIN.C. | |
| extraCompilerArgs | No | Optional extra Turbo C flags, e.g. ['-ms','-w-','-O']. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states it returns the generated .ASM but does not specify whether the return value is the file content or path, nor does it mention error handling, side effects, or permissions. The description lacks detail on behavior beyond the basic compilation step.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first clearly states the action and output, the second provides usage contexts. Every sentence earns its place without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should clarify the return format, but it only says 'return the generated .ASM'. It does not mention if the assembly is returned as a string, file path, or other. The description is adequate but leaves a clear gap for an agent to understand the exact return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add meaningful information beyond the schema; it mentions TCC -S in the description but that is not parameter-specific. No additional parameter guidance is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it compiles C to a Turbo C assembly listing using TCC -S and returns the .ASM. It specifies the verb 'compile', resource 'C code', and output 'assembly listing', distinguishing it from sibling tools that analyze, run, or format code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states it is great for teaching C-to-assembly mapping, inspecting codegen, and optimization study. While it doesn't mention when not to use or explicitly name alternatives, the usage contexts are clear and differentiate from tools like compile_and_run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_exampleA
Return the full C source of a built-in example by id (see list_examples).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Example id, e.g. 'fibonacci'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes main behavior (returning source code) but lacks details on permissions, size limits, or error handling. No annotations present to fill gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with verb, no extraneous text. Highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with one param and clear purpose, description covers primary behavior and points to sibling for IDs. No output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter description. Description adds 'full C source' context but does not significantly enhance beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states action 'Return' and resource 'full C source of a built-in example'. Distinguishes from sibling 'list_examples' by referencing it for IDs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies users should call list_examples first to get IDs, but does not provide explicit when-to-use vs alternatives like run_example or compile_and_run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_examplesB
Browse the built-in library of classic Turbo C programs (hello, Fibonacci, prime sieve, bubble sort, Towers of Hanoi, structs, file I/O, conio colors, BGI graphics, matrix multiply, number-guessing game, Pascal's triangle). Returns ids you can run.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional category filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the read-only nature (browsing) and the return of IDs, but does not elaborate on potential side effects, rate limits, or the exact format of the list. It is adequate but not highly detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and lists examples. It is concise but the list of examples is somewhat verbose; however, it provides useful context without being overly long. Minor room for improvement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter and no output schema, the description is moderately complete. It explains the function and returns value, but lacks details on how IDs map to other tools or error cases. Given the complexity, it is acceptable but could be more thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the optional 'category' parameter with enum values and 100% coverage. The description does not add any additional meaning about the parameter, so it meets the baseline of 3 but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Browse the built-in library of classic Turbo C programs'. It includes specific examples and mentions it returns IDs that can be run, which distinguishes it from siblings like get_example and compile_and_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives such as get_example or run_example. While the purpose is clear, there is no explicit 'when to use' or 'when not to use' context, which is needed given the variety of sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_exampleA
Compile and run a built-in example by id in one shot (uses its sample stdin when defined).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Example id, e.g. 'prime-sieve'. | |
| stdin | No | Override the example's sample stdin. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that sample stdin is used if not overridden, and that the action is 'in one shot' (atomic). However, no mention of side effects, output format, or error handling. With no annotations, the burden is higher; some behavioral aspects are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence front-loads purpose and adds a parenthetical detail on default behavior. No wasted words, fully efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, key parameter semantics, and default stdin behavior. However, with no output schema, it does not explain what the tool returns (e.g., program output as string, stdout passthrough, or just exit status). This leaves a gap for an execution tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds value by providing an example value for 'id' ('prime-sieve') and clarifying that 'stdin' overrides the sample stdin, giving practical usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Compile and run a built-in example by id in one shot', specifying verb and resource. It distinguishes from siblings like 'get_example' (retrieve only) and 'list_examples' (list only), as well as 'compile_and_run' which likely handles custom code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly describes when to use (to run built-in examples by id) but does not explicitly state when not to use or name alternatives. No guidance on using compile_and_run for custom code.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v2.0.0- First observed
analyze_code - First observed
benchmark - First observed
clean_workspace - First observed
compile_and_run - First observed
compile_check - First observed
environment_doctor - First observed
explain_error - First observed
format_code - First observed
generate_asm - First observed
get_example - First observed
list_examples - First observed
run_example
TDQS
Scored across 12 tools
Each tool serves a distinct purpose. For example, analyze_code performs static analysis without compiling, while compile_check is a compile-only syntax check. There is no overlap that would confuse an agent.
Most tool names follow a verb_noun pattern (e.g., analyze_code, format_code). However, 'benchmark' is a single noun and 'environment_doctor' deviates slightly, introducing minor inconsistency.
With 12 tools, the set is well-scoped for a Turbo C development server. Each tool covers a necessary operation without bloat or triviality.
The tool surface covers the entire workflow: analysis, compilation, execution, benchmarking, error explanation, formatting, assembly generation, environment diagnosis, and example management. No obvious gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
MCP server for AI agent profiles and smart notes. 60+ coding prompt packs with expert personas.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yoโฆ
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal Eโฆ
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables AI agents to code and debug Commodore PET software using the VICE emulator, with CLI and MCP tools for session control, screen reading, memory manipulation, and testing.441MIT
- AlicenseAqualityBmaintenanceMCP server providing embedded engineering calculators and code generators as tools for AI agents, enabling precise, deterministic embedded math and C code generation.2982MIT
- AlicenseNot gradedqualityCmaintenanceBridges AI agents to a DOSBox emulator, enabling control of DOS programs via MCP tools for typing, screen reading, video capture, Lua scripting, and memory access.2GPL 2.0
- FlicenseNot gradedqualityBmaintenanceThis MCP server enables AI agents to inspect and control the native DOSBox-X debugger through bounded MCP tools, including breakpoint management, execution control, register/memory inspection, and disassembly for DOS program debugging and reverse engineering.1-