What the MCP Server Does #
DMSI Planner includes a built-in Model Context Protocol (MCP) server that lets external AI tools read and write your project data. When enabled, any MCP-compatible client — Claude Code, Claude Desktop, or your own scripts — can connect to your planner and work with your products, projects, tasks, and activity log.
Connection Details #
| Setting | Value |
|---|---|
| Transport | HTTP (JSON-RPC 2.0) |
| Default port | 7900 |
| Endpoint | POST http://127.0.0.1:7900/mcp |
| Binding | localhost only (127.0.0.1) |
The server only accepts connections from your own machine. It is not exposed to the network.
Enable and Configure #
Go to Settings → MCP Server. From there you can:
- Enable or disable the MCP server (enabled by default)
- Change the port if 7900 conflicts with another service
- See the current server status (running / stopped)
When enabled, the server starts automatically when the app launches.
Connecting an AI Agent #
Claude Code #
Add the following to your Claude Code MCP configuration (.mcp.json or project settings):
{
"mcpServers": {
"dmsi-planner": {
"url": "http://127.0.0.1:7900/mcp"
}
}
}Once connected, Claude Code can call any of the tools listed below to query or update your planner data.
Claude Desktop #
In Claude Desktop settings, add a new MCP server with the URL http://127.0.0.1:7900/mcp.
Custom Clients #
Any client that speaks MCP over HTTP can connect. Send JSON-RPC 2.0 requests to the endpoint:
POST http://127.0.0.1:7900/mcp
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_products",
"arguments": {}
}
}Available Tools #
Read Tools #
get_products #
List all products, optionally filtered by product group.
| Parameter | Required | Description |
|---|---|---|
group_id | No | Filter by product group UUID |
get_projects #
List projects for a product.
| Parameter | Required | Description |
|---|---|---|
product_id | No | Product UUID |
include_children | No | Include nested sub-projects (default: true) |
get_tasks #
List tasks (plan steps) for a project.
| Parameter | Required | Description |
|---|---|---|
project_id | Yes | Project UUID |
get_standalone_tasks #
List standalone tasks, optionally filtered by product.
| Parameter | Required | Description |
|---|---|---|
product_id | No | Filter by product UUID |
get_statuses #
Get a summary of all entities grouped by status.
| Parameter | Required | Description |
|---|---|---|
product_id | No | Scope to a specific product |
project_id | No | Scope to a specific project |
get_dependencies #
Get dependency edges for an entity.
| Parameter | Required | Description |
|---|---|---|
entity_type | No | Filter by entity type |
entity_id | No | Filter by entity UUID |
Write Tools #
Write tools are blocked when the app is in read-only mode (expired trial or revoked license).
create_task #
Create a new task in a project.
| Parameter | Required | Description |
|---|---|---|
project_id | Yes | Project UUID |
name | Yes | Task name |
description | No | Task description |
update_task #
Update fields on an existing task.
| Parameter | Required | Description |
|---|---|---|
id | Yes | Task UUID |
name | No | New name |
description | No | New description |
status | No | One of: created, not_started, in_progress, paused, blocked, completed, cancelled |
start_date | No | ISO date (YYYY-MM-DD) |
due_date | No | ISO date (YYYY-MM-DD) |
pause_reason | No* | Required when status is “paused” |
pause_in_progress | No | What was in progress when paused |
pause_resume_instructions | No | Instructions for resuming |
blocked_by | No* | Required when status is “blocked” |
blocked_reason | No | Why the task is blocked |
create_standalone_task #
Create a standalone task linked to a product (not inside a project).
| Parameter | Required | Description |
|---|---|---|
product_id | Yes | Product UUID |
name | Yes | Task name |
description | No | Task description |
update_standalone_task #
Update fields on an existing standalone task. Same fields as update_task, plus:
| Parameter | Required | Description |
|---|---|---|
product_id | No | Move the task to a different product |
create_log_entry #
Write a note to the activity log.
| Parameter | Required | Description |
|---|---|---|
note | Yes | The note text |
entry_type | No | “note” (default) or “mcp_write” |
entity_type | No | Related entity type (e.g. “plan_step”) |
entity_id | No | Related entity UUID |
Search Tools #
search_log #
Search the activity log with full-text search and filters.
| Parameter | Required | Description |
|---|---|---|
query | No | Full-text search terms |
time_start | No | ISO datetime lower bound |
time_end | No | ISO datetime upper bound |
entity_type | No | Filter by entity type |
entity_id | No | Filter by entity UUID |
actor | No | human, mcp, ai, or system |
entry_type | No | status_change, create, update, delete, note, mcp_write, priority_change, dependency_change |
limit | No | Max results (default: 50) |
offset | No | Pagination offset (default: 0) |
search_discussions #
Full-text search across discussion briefs.
| Parameter | Required | Description |
|---|---|---|
query | Yes | Search terms |
linked_entity_id | No | Filter by linked entity UUID |
limit | No | Max results (default: 50) |
create_brief #
Create a discussion brief. Immediately searchable via search_discussions.
| Parameter | Required | Description |
|---|---|---|
title | Yes | Brief title |
summary_text | Yes | Brief content |
linked_entity_type | No | Related entity type |
linked_entity_id | No | Related entity UUID |
tags | No | Array of tag strings |
How Changes Appear in the App #
Every write operation performed through MCP:
- Creates an entry in the activity log with actor set to “mcp”
- Triggers a real-time UI update — you see changes appear immediately
- Fires desktop notifications (if configured)
The MCP server has full read and write access but respects license state: write tools are disabled in read-only mode.
