Skip to main content
Glama
README.md
# dart-mcp-server

[![smithery badge](https://smithery.ai/badge/@jmanhype/dart-mcp-server)](https://smithery.ai/server/@jmanhype/dart-mcp-server)

MCP server that bridges the [Dart](https://itsdart.com) project management platform to AI assistants. The server is TypeScript but delegates all Dart API calls to a Python subprocess using the `dart-sdk` package.

## What It Does

Exposes Dart's task management, document, space, and dartboard operations as MCP tools. Each tool call spawns a Python process that imports `dart-sdk`, executes the operation, and returns JSON results over stdout. Communicates with MCP clients over stdio.

## Status

| Area | State |
|------|-------|
| MCP transport | stdio |
| Language | TypeScript (server) + Python (Dart SDK calls) |
| MCP SDK | `@modelcontextprotocol/sdk` ^1.5.0 |
| Dart SDK | `dart-sdk` (pip, called via subprocess) |
| Node.js | >= 16.0.0 |
| Python | >= 3.8.0 |
| License | MIT |

## MCP Tools

| Tool | What It Does |
|------|-------------|
| `create_task` | Create a task with title, description, priority, status, assignees, tags |
| `update_task` | Update an existing task's status, title, or description by DUID |
| `get_default_status` | Return default status DUIDs for a dartboard |
| `get_default_space` | Return the default space DUID |
| `get_dartboards` | List available dartboards |
| `get_folders` | List folders in a space |
| `create_folder` | Create a new folder |
| `create_doc` | Create a document or report |
| `create_space` | Create a new workspace |
| `delete_space` | Delete a workspace by DUID |

## Setup

### Via Smithery

```bash
npx -y @smithery/cli install @jmanhype/dart-mcp-server --client claude
```

### Manual

```bash
git clone https://github.com/jmanhype/dart-mcp-server.git
cd dart-mcp-server
npm install          # also runs postinstall: creates .venv and pip installs dart-sdk
npm run build
npm start
```

### Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `DART_TOKEN` | Yes | Dart API token (get from your Dart profile) |
| `PYTHONPATH` | No | Path to Dart SDK if not in default location |
| `PYTHON_PATH` | No | Path to Python executable (defaults to system Python) |

### Verifying the Python Environment

```bash
python -c "import dart; print(dart.__version__)"
```

If this fails, the MCP server will not be able to execute any tools.

## Architecture

```
src/
  index.ts  — MCP server, tool handlers, Python subprocess management
  test.ts   — Basic test runner
```

Each tool handler builds a Python script as a string, spawns `python3 -c "<script>"`, and parses the JSON output. The Python process has a 120-second timeout.

## Limitations

- Every tool call spawns a new Python process (no persistent connection to Dart API)
- The `.env` path is hardcoded to `/Users/speed/dart-tools/.env` in the source
- No input validation beyond what the Dart SDK provides
- No pagination support for list operations
- Error messages from the Python subprocess are passed through as-is
- The `postinstall` script creates a virtualenv, which may fail in some CI environments

## Dependencies

| Package | Version | Purpose |
|---------|---------|---------|
| `@modelcontextprotocol/sdk` | ^1.5.0 | MCP server protocol |
| `dotenv` | ^16.4.7 | Environment variable loading |
| `typescript` | ^5.3.3 | Build toolchain |
| `dart-sdk` | (pip) | Python client for Dart API |

## License

MIT

TDQS

B3.2/5.0

Scored across 10 tools

Disambiguation4/5

Most tools have distinct purposes focused on different resources (documents, folders, spaces, tasks, dartboards), but 'create_doc' and 'create_folder' could be confused if a document is stored in a folder, though their descriptions clarify separate actions. No direct functional overlap exists between other tools.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case (e.g., create_doc, get_dartboards, update_task). The naming is predictable and uniform across all 10 tools, making it easy for agents to understand the action and target.

Tool Count5/5

With 10 tools, the count is well-scoped for a Dart MCP server, covering core operations like creation, retrieval, update, and deletion. Each tool appears to serve a specific purpose without redundancy, fitting typical server scope of 3-15 tools.

Completeness3/5

The toolset covers creation and retrieval for documents, folders, spaces, and tasks, with update for tasks and delete for spaces, but lacks update/delete for documents and folders, and retrieval for tasks and documents. This creates notable gaps in CRUD coverage, though agents might work around them with available tools.

Maintenance

ActivityInactive
ResponsivenessNo issues