6.5. MCP Server — AI Tool Integration

The daslang MCP server exposes 28 compiler-backed tools to AI coding assistants via the Model Context Protocol. It provides compilation diagnostics, type inspection, go-to-definition, find-references, AST dump, AOT generation, expression evaluation, parse-aware grep, and more.

Uses stdio transport – no extra build dependencies.

6.5.1. Quick start

Test the server manually:

# Windows
bin/Release/daslang.exe utils/mcp/main.das

# Linux
./bin/daslang utils/mcp/main.das

Configure in .mcp.json (project root):

{
  "mcpServers": {
    "daslang": {
      "command": "bin/Release/daslang.exe",
      "args": ["utils/mcp/main.das"]
    }
  }
}

Or add via CLI:

claude mcp add daslang -- bin/Release/daslang.exe utils/mcp/main.das

Claude Code starts and stops the server automatically with each session.

6.5.2. Tools

The server exposes 28 tools. Each tool is invoked via MCP’s tools/call method.

6.5.2.1. Compilation and diagnostics

Tool

Description

compile_check

Compile a .das file and return errors/warnings plus a categorized function listing on success. Optional json for structured output.

list_functions

Compile a .das file and list all user functions, class methods, and generic instances (after macro expansion).

list_types

Compile a .das file and list all structs, classes (with fields), enums (with values), and type aliases.

list_requires

Compile a .das file and list all require dependencies (direct and transitive), with source file paths. Optional json for structured output.

list_modules

List all available daslang modules (builtin C++ modules and daslib). Optional json for structured output.

list_module_api

List all functions, types, enums, and globals exported by a builtin or daslib module. Optional compact mode for large modules, filter for substring matching, section to limit output (e.g. functions, structs).

6.5.2.2. Code navigation

Tool

Description

goto_definition

Given a cursor position (file, line, column), resolve the definition of the symbol under the cursor. Returns location, kind, and source snippet.

type_of

Given a cursor position, return the resolved type of the expression under the cursor (innermost to outermost).

find_references

Find all references to the symbol under the cursor. Scope: file (default) or all (all loaded modules).

find_symbol

Cross-module symbol search (functions, generics, structs, handled types, enums, globals, typedefs, fields). Case-insensitive substring by default; =query for exact match.

Cursor-based tools (goto_definition, type_of, find_references) support a no_opt parameter that disables compiler optimizations to preserve the full AST – useful when globals, enum values, or bitfield constants get constant-folded away.

6.5.2.3. Program introspection

Tool

Description

ast_dump

Dump AST of an expression or compiled function. mode=ast returns S-expression, mode=source returns post-macro daslang code. Optional lineinfo.

program_log

Produce full post-compilation program text (like options log). Shows all types, globals, and functions after macro expansion. Optional function filter.

describe_type

Describe a type’s fields, methods, values, and base type. Supports structs, classes, handled types, enums, bitfields, variants, tuples, typedefs.

6.5.2.4. Execution

Tool

Description

run_script

Run a .das file or inline code snippet and return stdout/stderr.

run_test

Run dastest on a .das test file and return pass/fail results. Optional json for structured output.

eval_expression

Evaluate a daslang expression and return its printed result. Supports module imports via require parameter.

6.5.2.5. Code generation and transformation

Tool

Description

format_file

Format a .das file using the built-in formatter.

convert_to_gen2

Convert a .das file from gen1 syntax to gen2 using das-fmt. Optional inplace flag.

aot

Generate AOT (ahead-of-time) C++ code for a .das file or a single function. Overloaded names return a disambiguation list.

6.5.2.6. Parse-aware search (tree-sitter)

Tool

Description

grep_usage

Parse-aware symbol search across .das files using ast-grep + tree-sitter. Finds identifier occurrences excluding comments and strings. Conditional on sg CLI.

outline

List all declarations in a file or set of files using tree-sitter. Works on broken/incomplete code – no compilation needed. Conditional on sg CLI.

6.5.2.7. Live-reload control

These tools interact with a running daslang-live instance via its REST API. All accept an optional port parameter (default 9090).

Tool

Description

live_launch

Launch daslang-live.exe on a script if not already running. Sets working directory to the script’s folder.

live_status

Query the running instance for fps, uptime, paused state, and error status.

live_error

Retrieve the last compilation error (plain text).

live_reload

Trigger an incremental or full reload.

live_pause

Pause or unpause execution.

live_command

Dispatch a [live_command] by name with JSON arguments.

live_shutdown

Gracefully shut down the running instance.

6.5.3. ast-grep / tree-sitter setup

The grep_usage and outline tools use ast-grep (sg CLI) with a custom tree-sitter grammar for daslang. The sgconfig.yml config file is platform-specific (shared library extension differs), so it is gitignored.

Copy the appropriate template to sgconfig.yml in the project root:

# Windows
cp sgconfig.yml.windows sgconfig.yml

# Linux
cp sgconfig.yml.linux sgconfig.yml

# macOS
cp sgconfig.yml.osx sgconfig.yml

6.5.4. Architecture

  • Each tool invocation runs in a separate thread with its own context/heap – when the thread ends, its memory is freed without GC.

  • Protocol logic lives in protocol.das, the entry point is main.das.

  • Heap is collected after each request when over threshold (1 MB).

  • Tool handlers are modular: each tool lives in tools/*.das, shared utilities in tools/common.das.

6.5.5. Protocol

The server implements MCP via JSON-RPC 2.0 over stdio:

  • Reads newline-delimited JSON (NDJSON) from stdin.

  • Writes JSON-RPC responses to stdout (one line per message).

  • Handles: initialize, tools/list, tools/call, ping.

  • Logs to stderr and to utils/mcp/mcp_server.log.

  • File paths passed to tools are resolved relative to the server’s working directory.

6.5.6. Configuring Claude Code permissions

Optionally, allow all MCP tools without prompting by adding to .claude/settings.json:

{
  "permissions": {
    "allow": [
      "mcp__daslang__compile_check",
      "mcp__daslang__list_functions",
      "mcp__daslang__list_types",
      "mcp__daslang__run_test",
      "mcp__daslang__format_file",
      "mcp__daslang__run_script",
      "mcp__daslang__ast_dump",
      "mcp__daslang__list_modules",
      "mcp__daslang__find_symbol",
      "mcp__daslang__list_requires",
      "mcp__daslang__list_module_api",
      "mcp__daslang__convert_to_gen2",
      "mcp__daslang__goto_definition",
      "mcp__daslang__type_of",
      "mcp__daslang__find_references",
      "mcp__daslang__program_log",
      "mcp__daslang__eval_expression",
      "mcp__daslang__describe_type",
      "mcp__daslang__grep_usage",
      "mcp__daslang__outline",
      "mcp__daslang__aot"
    ]
  }
}

See also

utils/mcp/README.md – setup and configuration details

Model Context Protocol specification

utils_daslang_live – the live-reload application host controlled by live_* tools