🔌 Model Context Protocol (MCP)

Model Context Protocol (MCP) Server Manual

Connect Anthropic Claude Desktop, Cursor, and autonomous AI agents directly to the 114 project deliverables and Draft 2020-12 schemas via standard JSON-RPC 2.0 stdio communication.

1. Protocol Architecture & Handshake Flow

The Model Context Protocol (MCP) is an open specification enabling AI assistants to securely connect to external data repositories and execution tools. Tasleemat packages an official standalone executable (tasleemat-mcp) that communicates via standard input/output (stdio) using strict JSON-RPC 2.0 framing. This design eliminates TCP port binding conflicts and allows seamless local sandboxing.


sequenceDiagram
    autonumber
    actor User as Engineer / PM
    participant Host as AI Client (Cursor / Claude Desktop)
    participant Server as Tasleemat MCP (stdio)
    participant Engine as Tasleemat Core Engine

    Host->>Server: JSON-RPC "initialize" (capabilities, client info)
    Server-->>Host: Server capabilities (tools advertised)
    Host->>Server: JSON-RPC "notifications/initialized"
    User->>Host: "Tailor deliverables for Tier 2 Agile project"
    Host->>Server: "tools/call" (name: "tasleemat_tailor_project", args: {tier: 2, pack: "agile"})
    Server->>Engine: get_tailoring_profile(tier=2, pack="agile")
    Engine-->>Server: List of 34 Deliverable IDs
    Server-->>Host: JSON-RPC Result (structured deliverable manifest)
    Host->>User: "Here is your tailored governance manifest..."
        

2. IDE & Assistant Configuration Setup

A. Anthropic Claude Desktop

Add the following snippet to your claude_desktop_config.json file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "tasleemat": {
      "command": "tasleemat-mcp",
      "args": []
    }
  }
}

B. Cursor AI IDE

Create or edit .cursor/mcp.json in your project root or user configuration:

{
  "mcpServers": {
    "tasleemat": {
      "command": "python3",
      "args": ["-m", "tasleemat.mcp"]
    }
  }
}

C. VS Code (Cline / Roo Code / Continue.dev)

In your extension settings under MCP Servers, declare:

{
  "mcpServers": {
    "tasleemat": {
      "command": "tasleemat-mcp",
      "args": [],
      "disabled": false,
      "autoApprove": [
        "tasleemat_list_forms",
        "tasleemat_get_form",
        "tasleemat_get_schema",
        "tasleemat_validate",
        "tasleemat_tailor_project",
        "tasleemat_calculate_eva"
      ]
    }
  }
}

3. Exhaustive 6 MCP Tools Reference & Payloads

1. tasleemat_list_forms

Lists available deliverables filtered by phase, sizing tier, or methodology pack.

// Client Request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tasleemat_list_forms",
    "arguments": {
      "phase": "03",
      "lang": "en"
    }
  }
}

// Server Response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "[{\"id\": \"PMO-03.01\", \"name\": \"Project Charter\", \"phase\": \"03\"}, ...]"
      }
    ]
  }
}

2. tasleemat_get_form

Fetches specific asset contents for a deliverable: template, guide, example, prompt, schema, or dictionary.

// Client Request
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "tasleemat_get_form",
    "arguments": {
      "artifact_id": "PMO-03.01",
      "asset_type": "template",
      "lang": "en"
    }
  }
}

3. tasleemat_get_schema

Retrieves the complete JSON Schema Draft 2020-12 definition to enable client-side schema inspection or agent prompt injection.

// Client Request
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "tasleemat_get_schema",
    "arguments": {
      "artifact_id": "PMO-04.08.02"
    }
  }
}

4. tasleemat_validate

Validates a structured JSON payload against the companion schema and returns exact JSON path errors.

// Client Request
{
  "jsonrpc": "2.0",
  "id": 4,
  "method": "tools/call",
  "params": {
    "name": "tasleemat_validate",
    "arguments": {
      "artifact_id": "PMO-03.01",
      "data": {
        "project_id": "PRJ-01",
        "project_name": "Cloud Platform",
        "sponsor": "Sarah Al-Ahmad"
      },
      "mode": "strict"
    }
  }
}

// Server Response
{
  "jsonrpc": "2.0",
  "id": 4,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"valid\": true, \"errors\": [], \"schema_id\": \"https://fakhr.me/schemas/pmo-03-01.json\"}"
      }
    ]
  }
}

5. tasleemat_tailor_project & 6. tasleemat_calculate_eva

tasleemat_tailor_project returns required deliverables for a tier/pack. tasleemat_calculate_eva computes attested EVM math metrics for PMO-06.05.

// Calculate EVA Metrics Request
{
  "jsonrpc": "2.0",
  "id": 6,
  "method": "tools/call",
  "params": {
    "name": "tasleemat_calculate_eva",
    "arguments": {
      "pv": 500000,
      "ev": 475000,
      "ac": 520000,
      "bac": 1200000
    }
  }
}

4. Step-by-Step Tutorials

Tutorial 1: Autonomous PMO Deliverable Drafting in Cursor Agent Mode

Once .cursor/mcp.json is saved, switch Cursor Composer to Agent Mode and prompt:

"We are initiating project PRJ-CLOUD. Using Tasleemat MCP tools, fetch the template and schema for PMO-03.01 (Project Charter), draft a compliant charter based on our kickoff notes in docs/notes.txt, and validate the JSON data before writing the file."

Cursor will autonomously execute tasleemat_get_form, inspect constraints via tasleemat_get_schema, run tasleemat_validate to confirm schema conformance, and write the finalized markdown file.

Tutorial 2: Building a Standalone Python MCP Client

You can interact with tasleemat-mcp from any Python application via standard subprocessing:

import subprocess
import json

def call_mcp_tool(tool_name: str, arguments: dict) -> dict:
    # Invokes a tool on the Tasleemat MCP server via stdio JSON-RPC
    proc = subprocess.Popen(
        ["tasleemat-mcp"],
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        text=True
    )
    
    # 1. Initialize Handshake
    init_req = {"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"capabilities": {}}}
    proc.stdin.write(json.dumps(init_req) + "\n")
    proc.stdin.flush()
    proc.stdout.readline()  # consume init response
    
    # 2. Call Tool
    call_req = {
        "jsonrpc": "2.0",
        "id": 2,
        "method": "tools/call",
        "params": {"name": tool_name, "arguments": arguments}
    }
    proc.stdin.write(json.dumps(call_req) + "\n")
    proc.stdin.flush()
    
    response_line = proc.stdout.readline()
    proc.terminate()
    return json.loads(response_line)

# Example: tailor project for Tier 2 Agile
result = call_mcp_tool("tasleemat_tailor_project", {"tier": 2, "pack": "agile"})
print("Tailored Result:", result)