Skip to main content
Glama

Mursa MCP

Connect Claude Code, Claude Desktop, Cursor, or any MCP-compatible client to your Mursa tasks, calendar, goals, notes, habits, projects, and Gmail.

📖 Full guide with screenshots: https://mursa.me/mcp


60-second install

1. Get an API key

  1. Open dashboard.mursa.me and sign in.

  2. Go to Settings → API keys.

  3. Click New key → pick a label, expiry, and scopes → Create.

  4. Copy the key (starts with mursa_mcp_…). You'll only see it once.

2. Add to your client

Claude Code (~/.claude.json)

{
  "mcpServers": {
    "mursa": {
      "command": "npx",
      "args": ["-y", "mursa-mcp"],
      "env": { "MURSA_API_KEY": "mursa_mcp_…" }
    }
  }
}

Restart Claude Code, run /mcp to confirm, call whoami to verify.

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%/Claude/claude_desktop_config.json (Windows) with the same block, then restart the app.

Cursor

Settings → MCP → Add new MCP server, same JSON block.

3. That's it

Your agent now has access to whatever scopes your key has.


Related MCP server: Forja MCP Server

Tools (28)

Group

Tools

Scope

Meta

whoami

(any)

Tasks (read)

list_inbox, list_myday, list_schedule, search_tasks

tasks:read

Tasks (write)

create_task, update_task, complete_task, defer_task, schedule_task

tasks:write

Calendar

list_calendar, create_calendar_event

calendar:*

Goals

list_goals, create_goal, update_goal, delete_goal

goals:*

Notes

list_notes, search_notes, create_note, update_note

notes:*

Habits

list_habits

habits:read

Projects

list_projects

projects:read

Email

list_emails, get_email, get_attachment, search_emails

email:read

Email

send_email, reply_email

email:send

* as a scope grants everything.


Security

  • API keys are sha256-hashed at rest — the raw value is never stored.

  • Per-key scopes + expiry. Revoke any key instantly from the dashboard.

  • Per-action rate limits (60/min reads, 30/min writes, 5/min email send).

  • Every call audit-logged for 90 days (action, status, latency, IP — no payload).

  • Email attachments capped at 3 MB each / 10 MB total per email.

  • All traffic goes through mursa.me/api/mcp; the Supabase function is gated by a shared proxy secret so direct hits return 403.


Run from source (advanced)

git clone https://github.com/Murali1889/Prod-Mursa.git
cd Prod-Mursa/mcp-servers/mursa
npm install
echo 'MURSA_API_KEY=mursa_mcp_…' > .env

Then point your client at the absolute path:

{
  "mcpServers": {
    "mursa": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-servers/mursa/server.js"]
    }
  }
}

Override the endpoint for preview deployments or local dev:

MURSA_API_URL=https://mursa-preview.vercel.app/api/mcp

(Default is https://mursa.me/api/mcp.)


Troubleshooting

Symptom

Fix

Invalid, expired, or revoked API key

Mint a fresh key in the dashboard, swap MURSA_API_KEY, restart your client.

This API key is missing the required scope: …

Your key wasn't granted that scope at mint time. Revoke and mint a new one with the scope checked.

Gmail is not connected. Connect Gmail in Mursa Settings first.

Connect Gmail from the Mursa app first.

Rate limit exceeded (5/min for send_email)

Slow down — strict throttle on outbound mail.

For server-side deployment (running your own Mursa instance), see DEPLOY.md.

Available Tools

28 tools
complete_taskC

Mark a task as completed.

Inputs: task_id (required).

create_calendar_eventA

Create a calendar event (a task with scheduled_date + start_time/end_time, task_type='meeting' by default).

Inputs: title (required), scheduled_date (required), start_time, end_time, +5 more.

create_goalD

Create a goal.

Inputs: title (required), description, color, target_date, +7 more.

create_noteD

Create a note.

Inputs: title, content, tags, color.

create_taskA

Create a task. With scheduled_date -> MyDay; without -> Inbox.

Inputs: title (required), description, priority, due_date, +11 more.

defer_taskB

Set a task's due_date to a new date (does not change scheduled_date).

Inputs: task_id (required), new_date (required).

delete_goalA

Delete a goal. Tasks that reference it are unlinked first (goal_id set to null).

Inputs: goal_id (required).

get_attachmentA

Download a single attachment from an email. Returns { size, contentBase64 } — decode the base64 to get the bytes.

Inputs: messageId (required), attachmentId (required).

get_emailA

Get the full content of a thread or single message. Returns body text + HTML + attachment metadata (use get_attachment to download).

Inputs: threadId, messageId.

list_calendarB

List calendar events (scheduled tasks with start_time) between two dates. Dates: YYYY-MM-DD.

Inputs: startDate (required), endDate (required).

list_emailsC

List Gmail threads in a label (default INBOX). Returns thread previews (subject/from/snippet/labels/unread).

Inputs: maxResults, pageToken, q, label.

list_goalsB

List your goals, optionally filtered by status ('active', 'completed', ...).

Inputs: status.

list_habitsA

List your active (non-archived) habits.

Inputs: no named parameters.

list_inboxA

List Inbox tasks (unscheduled, personal, not completed by default).

Inputs: status, limit, includeScheduled.

list_mydayB

List tasks scheduled for a specific day (default today). Date: YYYY-MM-DD.

Inputs: date.

list_notesC

List notes, pinned first, then most recently updated.

Inputs: limit.

list_projectsA

List your projects, most recently updated first.

Inputs: no named parameters.

list_scheduleB

List all scheduled tasks between startDate and endDate inclusive. Dates: YYYY-MM-DD.

Inputs: startDate (required), endDate (required).

reply_emailA

Reply to an existing thread. Subject and recipient default to the last message's. Rate-limited to 5/min.

Inputs: threadId (required), to, cc, bcc, +4 more.

schedule_taskB

Move a task onto a specific date (MyDay). Optionally set start/end time and duration.

Inputs: task_id (required), scheduled_date (required), start_time, end_time, +2 more.

search_emailsA

Search Gmail using Gmail's query syntax (e.g. 'from:alice has:attachment newer_than:7d'). Returns message ids; use get_email to fetch.

Inputs: query (required), maxResults.

search_notesC

Search note titles and content by ILIKE.

Inputs: query (required), limit.

search_tasksB

Search task titles by ILIKE match. Returns most recently updated first.

Inputs: query (required), limit.

send_emailB

Send a new email. Attachments are base64-encoded; ≤3MB each, ≤10MB total. Rate-limited to 5/min.

Inputs: to (required), subject (required), cc, bcc, +3 more.

update_goalD

Patch a goal.

Inputs: goal_id (required), title, description, color, +10 more.

update_noteC

Patch a note.

Inputs: note_id (required), title, content, tags, +2 more.

update_taskC

Patch any subset of editable fields on a task.

Inputs: task_id (required), title, description, status, +14 more.

whoamiA

Show which Mursa user this API key belongs to.

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.8/5.0

    Scored across 28 tools

    Disambiguation4/5

    Tools are mostly distinct per domain, but slight overlap between create_calendar_event and create_task (both create scheduled tasks), and between list_calendar and list_schedule (both list tasks with dates). Minor confusion possible.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern in snake_case (create_, list_, update_, delete_, search_, get_, send_, reply_, complete_, defer_, schedule_). Very predictable.

    Tool Count4/5

    28 tools is on the higher end but still appropriate for a comprehensive personal productivity server covering tasks, emails, goals, notes, habits, projects, and calendar. No bloated extras.

    Completeness2/5

    Significant gaps: missing delete operations for tasks and notes, no update for habits, no CRUD for projects (only list), and no email archive/delete. Agent workflows may hit dead ends.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      Exposes specialized agents as MCP tools so users can manage and triage Jira tasks, analyze repositories for health and conventions, generate commit/PR/DevOps patterns, assemble reports, produce slides and infographics, and run semantic search over a knowledge base. Everything is invokable directly from inside a coding session in Claude Code, Cursor, or Claude Desktop.
      1
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables AI assistants like Claude, Cursor, VS Code, and Windsurf to manage workspaces, projects, tasks, and AI agents through natural language, with a hosted OAuth server or a local stdio package. Also supports generating MCP tools from any OpenAPI spec.
      2,530 npm
      MIT