Mikes Moose MCP
This MCP server enhances AI assistants for writing DCS World mission scripts using the MOOSE framework. It provides:
Indexing and search: Ingest Moose.lua files to build a searchable index, then look up precise class/method documentation, fuzzy-search names, or explore inheritance trees (cheapest query).
Best practices and examples: Retrieve author-curated rules for planning and coding phases, and vetted examples for common patterns.
Mission parsing: Safely extract group names, unit types, waypoints, and triggers from .miz files to avoid guesswork.
Log analysis: Parse dcs.log for runtime events, errors, and tracebacks, or tail live for near-real-time updates.
Code validation: Check Lua snippets against the indexed framework to catch unknown methods, deprecated classes, and anti-patterns.
Instance management: Register and manage DCS installation paths (Stable/OpenBeta, server/client) for easy reference.
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., "@Mikes Moose MCPLook up the SPAWN class and list its methods"
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.
Mikes Moose MCP
This is a helper that makes AI assistants (like Cline, Claude, or Cursor) much better at writing mission scripts for DCS World using the MOOSE framework. It works by giving the AI accurate, up-to-date information about MOOSE — so it stops guessing and starts writing code that actually runs.
What problem does it solve?
AI models are trained on internet data, and their knowledge of MOOSE is often out of date or just wrong. They might use a class that no longer exists, call a method with the wrong name, or write Lua that won't work in DCS.
This helper solves that by handing the AI a 10-megabyte reference manual it can dip into, without ever loading the whole thing. It's the difference between asking a friend who "kind of remembers" MOOSE, and handing them a book that's open to exactly the right page. Instead of relying on its memory, the AI can ask the helper:
"What methods does the SPAWN class have?"
"How do I schedule something to happen every 30 seconds?"
"Is this code I wrote valid MOOSE?"
"What group names are actually in my mission file?"
"Why did my script error out?"
The helper answers with small, precise facts pulled from your actual MOOSE files — not from the AI's fuzzy memory. The trick that makes this possible is that the 10 MB file is parsed once into a searchable index, and the AI only ever sees the little slice it asks for. Which raises the obvious question: how does that not obliterate the AI's (small) working memory? Read on.
Related MCP server: llms-mcp
Why a 10 MB file doesn't blow your AI's context window
This is the single most important idea in the whole project, so it's worth spelling out.
An AI assistant talks to you using a limited "working memory" called the context window — a budget of tokens (roughly, chunks of text) it can hold and reason over at once. MOOSE's main file is about 10 MB of Lua and documentation — far more than fits in that window. If you just pasted the whole file, you'd instantly blow the budget and the AI would stop working.
So this helper never sends the whole file to the AI. Instead:
Parsed once, indexed forever. When you install, the helper reads the 10 MB
Moose.lua, breaks it into 587 classes and 6,379 methods, and stores them in a small searchable index on your disk.The AI asks, the index answers. When the AI needs to know about, say, the SPAWN class, it doesn't get the whole file — it gets just SPAWN's documentation and method signatures. Maybe 200–500 tokens.
Answering costs pennies of the budget. A single lookup is like opening one page of a book and reading it aloud. The other 9,999 pages stay closed on the shelf.
Your version, not a stranger's. Because the index is built from your
Moose.lua, the answers match the exact MOOSE build your missions use. The AI is never reasoning about an outdated copy.
The result: the AI gets the accuracy of a full 10 MB reference manual while only spending a few hundred tokens at a time. That's what makes it practical for small, budget AI models — not just top-tier ones.
What you need before you start
This is a one-time setup. You'll need:
DCS World installed (any edition — Stable or OpenBeta), since the whole point is reading your mission files and logs.
Node.js, the program that runs JavaScript helper tools like this one. If you don't have it or aren't sure, follow the short check below.
An AI assistant that supports "MCP servers". Cline, Claude Desktop, and Cursor all do. If you're using Cline, you're already good to go.
Don't worry if you've never heard of MCP or Node before — the next two sections walk you through it with no assumed knowledge.
Step 1 — Do you have Node.js?
Node.js is a free program that runs helper tools on your computer. To check if you have it:
Windows: press the Windows key, type
cmd, and press Enter. In the black window, type:node --versionIf you see something like
v20.0.0, you have it. If you see'node' is not recognized, you need to install it.
To install it (Windows):
Go to https://nodejs.org
Download the LTS version (the big green button)
Run the installer — click Next through everything, using the default options
Reopen the
cmdwindow and runnode --versionagain to confirm
Step 2 — Get and install this helper
There isn't a pre-built "release" you download and run. This helper is source code that you download once, then build on your own machine. It's not hard — the commands below do all the work.
Once Node.js is working:
Get the software from here:
https://github.com/thebgpikester/Mikes-Moose-MCPClick the green Code button → Download ZIP, then unzip it to somewhere you'll remember — e.g.
C:\moose-mcp.(Or, if you have Git installed, you can instead run
git clone https://github.com/thebgpikester/Mikes-Moose-MCP.git C:\moose-mcp— same result.)
You should now have a folder
C:\moose-mcpcontaining items likesrc/,package.json,README.md, andLICENSE.Open
cmdand go into that folder:cd C:\moose-mcpRun the install command (this downloads the helper's dependencies — takes a minute or two the first time):
npm installRun the build command (this compiles the source into the program your AI assistant will actually run):
npm run build
That's it. The helper is now installed and ready.
How the helper finds MOOSE knowledge — your MOOSE, not a stranger's
The helper reads a Moose.lua file and turns it into a searchable index the AI uses to answer questions. There are two ways to give it that file. You can use one or both — it's quick and safe to switch between them.
Option A — Use the downloaded latest MOOSE (easiest, once)
Run this once to fetch the most recent official MOOSE framework file from the internet:
npm run download-referenceThis stores a clean reference copy the helper can index. It's a good starting point, and it's the file used if you ever ask the helper to index "the latest MOOSE."
Option B — Use YOUR MOOSE (recommended for missions)
This is the important one. Your DCS/missions don't necessarily use the latest MOOSE — they use whatever Moose.lua you ship or load. So for answers that match your setup exactly, point the helper at your own file. You don't even need a command — just tell your AI assistant, and it will call the moose_ingest tool with the path to your file (for example):
moose_ingest
path: "C:\\Users\\YourName\\Saved Games\\DCS\\Scripts\\Moose.lua"It works with any real file path, including a network (UNC) share:
moose_ingest
path: "\\\\ServerName\\Shared\\Missions\\Moose.lua"It also works directly on a mission file, pulling out whichever Moose.lua is embedded inside it:
moose_ingest
path: "C:\\Users\\YourName\\Missions\\MyMission.miz"What to expect when you ingest a file
When the AI calls moose_ingest, you'll get a short status back, something like:
{
"ok": true,
"message": "Indexed 587 types, 6379 methods.",
"status": {
"source": "local", // "local", "reference-download", or "miz-embedded"
"filePath": "C:\\Users\\YourName\\Saved Games\\DCS\\Scripts\\Moose.lua",
"commit": "2026-02-06...130d358f4a...", // the exact MOOSE build, if detectable
"typeCount": 587,
"methodCount": 6379
}
}Three things to know:
Do this after you update MOOSE. If you switch to a newer/older Moose.lua, re-run
moose_ingestwith the new path. The index is rebuilt to match that file.Re-ingesting the same file is free. The helper hashes the file; if nothing changed, it just refreshes the timestamp — no rebuild.
The index is for one file at a time. The current setup indexes the file you most recently asked for. If you switch between your local copy and the reference download, the last one you ingested is the one the AI sees. That's deliberate — it stops the AI from mixing answers across two different MOOSE versions.
Want to test it? Type
npm test. It should run through a few checks and print something likeAll 5 suites passed.If it does, everything works.
Step 3 — Connect it to your AI assistant
An MCP server is just a small program that your AI assistant can talk to, like an extra pair of eyes. You tell your assistant where the helper is, and it does the rest.
If you use Cline
Open Cline's settings (the ⚙️ icon, then "MCP Servers").
Add a new server with these exact settings, changing the path to where you unzipped the project:
{ "mcpServers": { "moose-mcp": { "command": "node", "args": ["C:\\moose-mcp\\build\\index.js"] } } }(Make sure
C:\moose-mcpmatches where you actually put it.)Restart your assistant / reload the window.
If you use Claude Desktop
Open the file
claude_desktop_config.json(in Claude's settings folder — the app can open it for you).Add the same block above to the
mcpServerssection.Restart Claude.
After this, your assistant should show a list of new tools it can use (they're all named moose_*).
Step 4 — How to use it
Once connected, just talk to your assistant normally and it will use the MOOSE tools automatically when it makes sense. For example:
"Write a script that spawns a flight of F-18s when a unit enters a zone." — the assistant will look up the correct SPAWN and ZONE classes and write Lua 5.1 code that follows MOOSE best practices.
"Check this code I wrote" — paste in some Lua and ask it to verify. The assistant will check every class and method name against the real MOOSE.
"Tell me how to use CARGO" — it will point you at a real example in the official MOOSE missions repository, rather than guessing.
"Why did my mission error?" — if you've turned on the debug logger (see below), it can read your
dcs.logand tell you exactly what went wrong and where, including which unit/group the error concerns.
Turning on the debug logger
If you want the helper to be able to read what actually happened in a mission (not just what should have happened), drop a small file into your mission:
Ask your assistant for the file (or take it from
src/logger-helper.luain this project).Put it in your mission's
Scriptsfolder, alongside (before)Moose.lua.Logging is on by default now. To turn it off later, set
GM.DEBUG = falsein that file.
With logging on, your assistant can parse dcs.log, find the current session, and tell you exactly what your script did — and what failed.
What's under the hood (in plain terms)
The helper has four jobs, and together they form a complete picture. Think of it as four reference books the AI can open:
Book | What it answers |
Framework Reference | "What is this class? What methods does it have? What are the parameters?" — read directly from your actual MOOSE files, so it matches the version you're using. |
Framework Practice | "What's the right way to do this?" — rules based on years of experience (e.g., use TIMER instead of SCHEDULER, don't wrap lookups in pcall). |
Mission Truth | "What's actually in my mission file?" — the real group names, units, and triggers, so the AI doesn't guess a |
Runtime Truth | "What actually happened when I ran it?" — read from your |
Why "version-matched" matters: DCS/missions use whichever MOOSE build they ship. The helper reads that file, so the AI never tells you about a method that doesn't exist in your version.
Troubleshooting
Problem | What to do |
| Node isn't installed (or |
| Usually a network issue. Re-run it; if it persists, check your internet connection / firewall. |
My assistant doesn't show the | The path in Step 3 is probably wrong. Double-check it points at |
| Try |
I can't find my DCS logs | The helper looks in the standard spot: |
For developers
Source code: everything is in the
src/folder (TypeScript files + one Lua helper).Run from source (while developing):
npm run devTest:
npm testThe four pillars map to
pillar1(parser/index),pillar2-tools.ts(practice),pillar3-parser.ts(mission),pillar4-reader.ts(log).
In short: install once, connect once, and your AI assistant stops guessing about MOOSE and starts writing DCS mission code that works.
Available Tools
11 toolsmoose_class_treeA
Returns the inheritance chain of a class (from the class up to BASE) plus the list of method names on each class in the chain. Method names only — no bodies, no docs. This is the cheapest query, ideal for checking "what methods does this class have?" quickly.
| Name | Required | Description | Default |
|---|---|---|---|
| class | Yes | MOOSE class name, e.g. "SPAWN", "AIRBASE", "GROUP". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the output's scope ('Method names only — no bodies, no docs') and performance expectations ('cheapest query'). It does not mention error handling or side effects, but its read-only nature is implied by 'Returns' and 'query'.
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 primary function and followed by a clear use case. Every phrase earns its place; no filler or repetition.
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 one-parameter query with no output schema, the description adequately explains the return structure (inheritance chain + method names) and intended use. It could be improved by noting error behavior or formatting, but that is not critical for this 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?
The schema already describes the 'class' parameter with examples, and the description adds no additional parameter-specific meaning. With 100% schema coverage, the baseline 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's function with a specific verb and resource: 'Returns the inheritance chain of a class... plus the list of method names on each class.' It also distinguishes itself from sibling tools by calling itself 'the cheapest query' and focusing specifically on method names.
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 provides a clear use case: 'ideal for checking "what methods does this class have?" quickly.' This gives context but does not explicitly exclude alternatives or name sibling tools, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moose_exampleA
Pillar 2 (Framework Practice). Returns a matching vetted author example for a pattern. Author examples mirror the authors own tested missions (e.g. STATIONKEEP, FLEET, SUBHUNT, ADMIRAL). If no vetted author example matches, returns [NEEDS AUTHOR] and declines to answer authoritatively — it will never fall back to unvetted community code unless asked explicitly.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | Pattern to match, e.g. "spawn", "carrier", "awacs". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It transparently discloses the key behavior: if no vetted example matches, it returns [NEEDS AUTHOR] and declines authoritative answers, and it never falls back to unvetted community code unless asked explicitly. This covers the main behavioral traits effectively, though it omits any mention of permissions or side effects, which are less critical for a read-only lookup.
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 three sentences, front-loaded with the primary purpose, and each sentence adds value: the main action, examples for context, and edge-case behavior. It is concise without being under-specified.
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 tool with one parameter and no output schema, the description fully covers the return values (matching example or [NEEDS AUTHOR]) and the special behavior. It also provides context about being Pillar 2 and the types of missions, making it sufficient for an agent to understand when and how to invoke it.
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 schema already provides 100% coverage for the single 'pattern' parameter with examples. The description adds contextual examples (STATIONKEEP, FLEET) but does not materially change the meaning or syntax of the parameter. Therefore, it does not go beyond the schema's 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 tool returns a matching vetted author example for a pattern, which is a specific verb+resource action. It also distinguishes itself from siblings by emphasizing 'vetted author examples' and its refusal to fall back to unvetted community code, making its role unique among the listed sibling tools.
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 the tool is for retrieving authoritative, vetted examples and notes that it will not use unvetted code unless explicitly requested. It provides context on when to rely on it, but does not explicitly name alternative tools or situations where those alternatives should be used instead, resulting in a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moose_ingestA
Index a Moose.lua file into the framework reference. Provide a path to a local Moose.lua (e.g. from Saved Games\DCS\Scripts\Moose.lua or a UNC path) optionally with source = local | miz-embedded | reference-download. If path is omitted, indexes the bundled latest reference build from GitHub. Re-ingesting is a no-op if the file hash is unchanged. Stamps every record with which file/hash/commit it came from.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Path to a Moose.lua file. Omit to use the bundled reference download. | |
| label | No | Optional human-readable label (e.g. "OpenBeta host"). | |
| source | No | Provenance tag. Defaults to local when a path is provided, reference-download otherwise. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description discloses important behaviors: re-ingesting is a no-op if the hash is unchanged, and every record is stamped with provenance (file/hash/commit). It does not mention side effects like overwriting existing records or permissions, but the disclosed idempotency and provenance are valuable.
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 uses four sentences to cover purpose, path examples, source options, idempotency, and provenance. It is front-loaded with the primary purpose and avoids fluff, though slightly longer than strictly necessary.
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 and no annotations, the description covers the essential context: what it does, how to invoke it, default behavior, and idempotency. It could mention how ingested files are used by sibling tools (e.g., lookup/search), but that is reasonably implied in the framework context.
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%, but the description adds meaning beyond the schema by explaining the 'path' example (Saved Games path or UNC), the 'source' enum defaults, and the behavior when 'path' is omitted (bundled GitHub reference). The 'label' parameter is not mentioned in the description, but the schema covers 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 opens with a specific verb and resource: 'Index a Moose.lua file into the framework reference.' It clearly distinguishes this ingest tool from sibling lookup/search tools by focusing on adding data rather than querying it.
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 gives clear context on when to provide a path and when to omit it, and explains the source parameter options and defaults. It does not explicitly name alternatives or exclusions (e.g., 'use moose_lookup for queries'), but the use case is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moose_instancesA
Cross-cutting instance registry. Knows each DCS install (Stable/OpenBeta, Saved Games path, server vs client). Use action=list to see known instances, action=add to register one (label, variant, saved_games_path, server), action=remove to delete. Once an instance is registered, moose_parse_log and moose_ingest can accept that label as a path instead of a full path.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Short label for the instance, e.g. "openbeta" (required for add/remove). | |
| action | Yes | list | add | remove | |
| server | No | Whether this is a server install (default false). | |
| variant | No | DCS variant (required for add). | |
| saved_games_path | No | Saved Games folder, e.g. C:\Users\you\Saved Games\DCS.openbeta (required for add). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full transparency burden. It does disclose the primary side effect (remove deletes) and the integration behavior (labels become usable as paths by moose_parse_log and moose_ingest). However, it omits details about persistence, error handling, or whether actions are reversible beyond 'delete.'
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 three sentences long and front-loaded: it states the tool's purpose, enumerates the actions, and explains the downstream benefit. Every word contributes meaning, with no fluff or 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 registry tool with five parameters and no output schema, the description is complete enough. It covers the purpose, usage, and integration with sibling tools. The lack of output format details is acceptable because the list/delete operations have self-evident results, though a brief mention of what 'list' returns would have pushed it to a 5.
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 schema covers 100% of parameters, giving the baseline of 3. The description adds value by grouping parameters per action (list, add, remove) and clarifying that 'server vs client' is an instance attribute. It also specifies which parameters are required for which actions, though the schema already notes 'required for add/remove' in individual fields.
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 identifies the tool as a 'Cross-cutting instance registry' with specific actions (list, add, remove) and explains its role in managing DCS installs. It distinguishes itself from sibling tools by focusing on instance registration rather than log parsing or mission validation.
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 states how to use the tool: 'Use action=list to see known instances, action=add to register one, action=remove to delete.' It also explains the benefit of registering an instance (other tools can use the label as a path), but stops short of explicitly describing when not to use it or naming alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moose_lookupA
Returns one precise record from the indexed Moose.lua: the LDoc documentation block, the real Lua function signature, return docs, and the inheritance chain up to BASE. Provide class (required) and optionally method. When method is omitted, returns the class record only. If the method exists on a parent class, it is returned flagged as inheritedFrom. Token-budget: one small record, never a dump.
| Name | Required | Description | Default |
|---|---|---|---|
| class | Yes | MOOSE class name, e.g. "SPAWN", "UNIT", "SCHEDULER". | |
| method | No | Optional method name, e.g. "New", "Spawn". Omit to get just the class record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the behavioral disclosure burden. It specifies what is returned (documentation block, signature, return docs, inheritance chain), how method inheritance is handled (inheritedFrom flag), and includes a token-budget warning ('never a dump'). This goes beyond minimal requirements.
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 four sentences, each earning its place: purpose, parameter usage, inheritance behavior, and token budget. It's front-loaded with the primary purpose and contains no 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 tool has no output schema and no annotations, the description provides a complete picture of what the agent can expect: exact content of the returned record, parameter behavior, inheritance handling, and output size constraints. This is sufficient for an agent to select and invoke the tool correctly.
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 provides 100% coverage for both parameters, so the baseline is 3. The description adds extra meaning by explaining that when a method is inherited, it is returned flagged as inheritedFrom. This semantic is not present in the schema and helps the agent understand the lookup behavior.
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 returns one precise record from the indexed Moose.lua, listing the exact contents (LDoc block, signature, return docs, inheritance chain). This distinguishes it from sibling tools like moose_search (which would search broadly) and moose_class_tree (which would show a tree). The verb 'Returns' and resource 'indexed Moose.lua' are specific.
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 provides clear usage context: class is required, method is optional, and it explains behavior when method is omitted. It also notes that inherited methods are flagged. However, it does not explicitly name alternative tools or state when not to use this tool, so it just misses the explicit 'when-not' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moose_parse_logA
Parse dcs.log for runtime truth (Pillar 4). Finds the current session start, extracts structured [GM] events (scope/phase/event sim + key=value), and collects SCRIPTING ERROR/WARNING, nil-index, and traceback lines. Never blends runs; handles truncation naturally. Token-budget returns only the requested number of events/errors, capped by default.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Path to a dcs.log file, or omit to use the auto-discovered DCS install. | |
| max_errors | No | Max errors to return (default 100). | |
| max_events | No | Max events to return (default 300). | |
| this_session_only | No | Only return events/errors from the current session (after the last session-start marker). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses key behaviors: handles truncation naturally, never blends runs, returns capped token-budget results, and focuses on structured GM events plus error/warning collection. It does not explicitly state whether parsing is read-only, but 'parse' implies non-destructive.
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 and front-loaded with the core purpose in the first sentence. The subsequent sentences add useful detail without redundancy. The phrase 'Pillar 4' is jargon but not excessive; overall it is tightly written.
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 explains what the tool returns: structured GM events, error/warning lines, and tracebacks. It also covers session handling, truncation, and token-budget limits. It does not specify the exact return format, but the description is sufficient for an agent to understand the tool's 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%, providing descriptions for all four parameters. The description adds meaning by explaining token-budget capping (max_events/max_errors) and session-only behavior via 'this_session_only' through the 'never blends runs' phrase, going 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 parses dcs.log for runtime truth, extracts structured [GM] events, and collects error/warning lines. It uses a specific verb ('parse') with a specific resource (dcs.log) and distinguishes itself from siblings like moose_tail_log (tailing) and moose_parse_mission (parsing a different file).
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 provides clear context for when to use the tool: to get runtime truth from a log, find session start, and parse errors. It highlights 'never blends runs' and token-budget behavior, but does not explicitly name alternatives or state when not to use it, falling just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moose_parse_missionA
Pillar 3 (Mission Truth). Parses a .miz mission file to expose real group names, unit types, countries, waypoints and trigger names. Copy-on-read: the .miz is copied to a temp dir and the mission Lua table is read as text, never executed. Kills FindByName misses with the actual entity names. Degrades gracefully if the file is locked by DCS or the ME.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to a .miz mission file. |
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 transparently discloses copy-on-read behavior, non-execution of the Lua table, and graceful degradation when the file is locked by DCS or the ME. This covers key safety and runtime behaviors, though it does not detail return format.
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 three sentences, front-loaded with the primary purpose, followed by safety behavior and edge-case handling. Every sentence adds value with no unnecessary words, making it concise and well-structured.
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 one parameter, no annotations, and no output schema, the description is quite complete. It specifies the data exposed (group names, unit types, countries, waypoints, trigger names), safety mechanisms, and graceful degradation. It does not explicitly state the return format, but the low complexity and listed data types make the behavior largely inferable.
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 a clear parameter description ('Path to a .miz mission file'), so baseline is 3. The description reinforces the .miz extension and file type but adds no additional syntax or format details beyond what the schema already 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 it parses a .miz mission file to expose real group names, unit types, countries, waypoints, and trigger names. The verb 'Parses' and resource '.miz mission file' are specific, and it distinguishes from sibling tool moose_parse_log by targeting mission files rather than logs.
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 provides a clear use case: 'Kills FindByName misses with the actual entity names,' indicating when to use this tool for resolving entity names. However, it does not explicitly mention when not to use it or name alternatives, so it meets clear context but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moose_practiceA
Pillar 2 (Framework Practice). Returns the most relevant AUTHOR-curated rules for how to use MOOSE well for a given task. Author rules are authoritative and always outrank community code. Optionally filter by phase: plan (planning constraints) or act (coding conventions). Plan/Act workflow: fire phase=plan during planning, phase=act while writing code. Returns small, precise rule records.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rules to return (1-30, default 10). | |
| phase | No | Optional: filter to planning or coding rules. | |
| topic | Yes | Task/topic, e.g. "spawn", "schedule", "task", "persist". |
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 behavioral traits such as the authoritative hierarchy ('always outrank community code') and the output nature ('small, precise rule records'). While it does not explicitly state read-only behavior, the verb 'Returns' strongly implies it, and the added context goes beyond a basic description.
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 front-loaded with the core purpose and includes actionable guidance. It is slightly repetitive (the word 'Returns' appears twice), but no sentence is wasted; each adds value—purpose, authority, phase meaning, workflow, and output format.
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 lacks an output schema, but the description partially compensates by stating the return format ('rule records'). It covers phase semantics and the authoritative ranking. It does not specify detailed fields of the rule records or edge-case behavior, but given the tool's moderate complexity, the description is reasonably complete.
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?
With 100% schema description coverage, the baseline is 3. The description adds practical meaning beyond the schema by explaining the Plan/Act workflow, linking phase values to specific times in the workflow (planning vs coding). This enriches the schema's simple enum 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 tool's function: it returns AUTHOR-curated rules for MOOSE usage, with a specific verb (returns) and resource (rules). It distinguishes itself from sibling tools by emphasizing that author rules are authoritative and outrank community code, and by referencing 'Pillar 2'.
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 gives clear workflow guidance, explaining when to use phase=plan vs phase=act ('fire phase=plan during planning, phase=act while writing code'). However, it does not explicitly name alternative tools or state when not to use this tool, relying on the authority claim to imply preference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moose_searchA
Fuzzy-match on half-remembered class or method names against the indexed Moose.lua. Returns each match as name + a one-line summary (plus signature/parent where available). Cap at 15 results by default, max 30. Use this before lookup when you only half-remember a name.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | Search term, e.g. "spawn", "unit", "scheduler". | |
| limit | No | Max results (1-30, default 15). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return format (name + one-line summary, plus signature/parent where available) and result caps (default 15, max 30). While it doesn't explicitly state read-only, the 'Fuzzy-match' and 'Returns' language strongly implies a non-mutating search operation.
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?
Three sentences, each earning its place: purpose, output format, limits, and usage guidance. No redundant or filler content, and the key information is front-loaded.
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 search tool with two parameters and no output schema, the description fully covers the what, how, and when. It explains the output shape and limits, and with sibling tools like moose_lookup, the usage context is complete. No significant gaps remain.
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 adds no new parameter-specific semantics beyond what the schema provides—the 'limit' default and max are already in the schema. The 'half-remembered' framing is more about purpose than parameter meaning.
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 a specific verb ('Fuzzy-match') and resource ('indexed Moose.lua'), and it distinguishes from sibling tools by framing the use case ('half-remembered class or method names'). This is a clear, non-tautological purpose.
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?
Provides explicit guidance: 'Use this before lookup when you only half-remember a name.' This names the alternative (moose_lookup) and specifies the condition for using this tool over it, making the usage context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moose_tail_logA
Tail mode for dcs.log. Parses only lines after from_line, for near-live following. Call repeatedly, advancing from_line from the returned newFromLine to get only new events. Handles truncation/rotation by resetting to 0.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to a dcs.log file. | |
| from_line | Yes | Parse only lines after this 0-based line index. Use the newFromLine from a previous call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses the stateful behavior (advancing from_line), the return of newFromLine, and the reset-to-0 handling of truncation/rotation. This goes beyond the schema and provides useful context about how the tool behaves over repeated calls.
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 compact and front-loaded: 'Tail mode for dcs.log' immediately conveys purpose. Each of the three sentences contributes distinct value: purpose, usage pattern, and robustness. No fluff or unnecessary repetition.
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?
Although there is no output schema, the description mentions 'newFromLine' and 'only new events,' which gives a sense of the return value and behavior. For a simple two-parameter tool with full schema coverage, this is nearly complete, though it could explicitly state the full return structure or error conditions.
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 schema already provides 100% coverage of both parameters, including the meaning of from_line and the instruction to use newFromLine from a previous call. The description reinforces this but does not add substantially new parameter details, so the schema does the heavy lifting.
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 identifies the tool as 'Tail mode for dcs.log' and explains it parses only lines after a given line index for near-live following. This clearly distinguishes it from the full-parse sibling moose_parse_log by focusing on incremental tailing.
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 provides explicit usage instructions: call repeatedly and advance from_line from the returned newFromLine to get only new events. It also explains truncation/rotation handling. However, it does not explicitly name alternatives or state when not to use it, but the tail semantics make the use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moose_validateA
Correlation core. Validates a generated Lua snippet against the Pillar 1 framework index. Every CLASS:METHOD call is looked up; unknown methods and classes are flagged, and deprecated-class or pcall-on-lookup anti-patterns are surfaced.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The Lua snippet to validate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: every CLASS:METHOD call is looked up, unknown methods/classes are flagged, and deprecated-class or pcall-on-lookup anti-patterns are surfaced. This goes beyond a simple 'validates' statement and gives a clear picture of the validation logic, though it could further clarify the output format or side effects.
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 compact, with two sentences total. The second sentence is highly informative. The opening 'Correlation core' is somewhat cryptic and does not immediately clarify the tool's purpose, which slightly reduces structure quality, but overall it is concise and free of redundant fluff.
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 there is no output schema or annotations, the description explains what the tool does and what it flags, but does not describe the return value format or error behavior. For a validation tool, it would be more complete to state what the output looks like (e.g., a list of issues), making this a gap. The low parameter complexity reduces the burden, so the description is adequate but not fully complete.
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% with one parameter ('code') described as 'The Lua snippet to validate.' The tool description adds some context (e.g., 'generated' snippet, validation against Pillar 1 index), but does not add significant meaning beyond the schema itself, so the 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's verb ('validates') and resource ('generated Lua snippet against the Pillar 1 framework index'), with explicit details about what it checks (CLASS:METHOD lookups, unknown methods/classes, anti-patterns). This distinguishes it from sibling tools like moose_lookup and moose_search, which likely focus on retrieval rather than validation.
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 usage: use this tool when you need to validate a Lua snippet against the framework index. However, it does not explicitly state when to use it over alternatives (e.g., moose_lookup for simple lookup, moose_example for examples) or provide exclusions, so guidance is only implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct role: search/lookup/class_tree for reference, example/practice for guidance, parse_log/tail_log for runtime analysis, and parse_mission for mission data. The only possible overlap is parse_log vs tail_log, but descriptions clearly separate full-session parsing from incremental tailing.
All tools share the 'moose_' prefix and snake_case, but the suffix pattern mixes verbs (ingest, lookup, search, validate), nouns (example, practice, instances), and verb_noun compounds (parse_log, tail_log, parse_mission). This is readable but not a single consistent convention.
With 11 tools, the server covers a comprehensive MOOSE workflow—indexing, querying, validating, log/mission parsing, and instance management—without excess. Each tool addresses a clear need, fitting well within the 3-15 sweet spot.
The tool set covers the major pillars of MOOSE development: framework reference, practice rules, runtime truth, mission truth, and validation. Minor gaps like removing indexed entries or listing all classes are workable via existing tools (e.g., re-ingest or search).
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
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server for generating rough-draft project plans from natural-language prompts.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseAqualityCmaintenanceAn MCP server that provides LLMs with access to Equinox documentation and tools to validate Equinox module code. It supports both online documentation fetching from GitHub and offline access through local files.3MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes the llms.txt file and its referenced local or external resources from a project root to provide context for AI models. It automatically parses documentation links and URLs to make them accessible as additional MCP resources.1MIT
- AlicenseNot gradedqualityDmaintenanceGeneric MCP server that exposes Markdown documentation to LLMs, enabling them to search and answer questions about any software documentation.MIT
- AlicenseNot gradedqualityBmaintenanceA local MCP server that gives AI coding assistants retrieval access to your personal knowledge base of books, standards, and docs, grounding their answers in sources you trust.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/thebgpikester/Mikes-Moose-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server