Atlas / MCP servers / robertn702 / Sunsama

SunsamaSAFE

mcp/robertn702/sunsama
Verdict
SAFE
Grade
B
Trust score
88 /100
Exposed tools
30 9r · 19w · 2d
Transport
stdio · streamable-http
License
MIT
Stars
52
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

A Model Context Protocol (MCP) server that provides comprehensive task management capabilities through the Sunsama API. This server enables AI assistants to access Sunsama tasks, create new tasks, mark tasks complete, and manage your productivity workflow.

Features

Task Management

  • Create Tasks - Create new tasks with notes, time estimates, due dates, stream assignments, and GitHub/Gmail integrations
  • Read Tasks - Get tasks by day with completion filtering, access backlog tasks, retrieve archived task history
  • Update Tasks - Mark tasks as complete with custom timestamps, reschedule tasks or move to backlog
  • Subtasks - Add, update, complete, and manage subtasks within tasks
  • Delete Tasks - Permanently remove tasks from your workspace

User & Stream Operations

  • User Information - Access user profile, timezone, and group details
  • Stream Management - Get streams/channels for project organization
  • Dual Transport - Support for both stdio and HTTP stream MCP transports

Installation

Prerequisites

  • Bun runtime (for development)
  • Sunsama account with API access

Using NPX (Recommended)

No installation required! Use directly with:

npx mcp-sunsama

Development Setup

  1. Clone the repository:
git clone https://github.com/robertn702/mcp-sunsama.git
cd mcp-sunsama
  1. Install dependencies:
bun install
  1. Set up your environment variables:
cp .env.example .env
# Edit .env and add your Sunsama credentials

Environment variables:

  • SUNSAMA_EMAIL - Your Sunsama account email (required for stdio transport)
  • SUNSAMA_PASSWORD - Your Sunsama account password (required for stdio transport)
  • TRANSPORT_MODE - Transport type: stdio (default) or http
  • `PORT
Read from source at commit 9d372a679047OBSERVED · 2026-10-08
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add mcp-sunsama --env SUNSAMA_PASSWORD=${SUNSAMA_PASSWORD} --env SUNSAMA_PASSWORD_2=${SUNSAMA_PASSWORD_2} --env SUNSAMA_SESSION_TOKEN=${SUNSAMA_SESSION_TOKEN} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "mcp-sunsama": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "SUNSAMA_PASSWORD": "${SUNSAMA_PASSWORD}",
        "SUNSAMA_PASSWORD_2": "${SUNSAMA_PASSWORD_2}",
        "SUNSAMA_SESSION_TOKEN": "${SUNSAMA_SESSION_TOKEN}"
      }
    }
  }
}
03

Exposed tools (30)

9 read · 19 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
add-subtaskwriteConvenience method to create a subtask with a title in one call (recommended for single subtask creation)
complete-subtaskreadMark a subtask as complete with optional completion timestamp
create-calendar-eventwriteCreate a new calendar event in Sunsama
create-subtaskswriteCreate multiple subtasks for a task (low-level API for bulk operations)
create-taskwriteCreate a new task with optional properties
delete-taskdestructiveDelete a task permanently
delete-task-bulkdestructiveDelete multiple tasks permanently in a single operation. Individual failures do not block others.
get-archived-tasksreadGet archived tasks with optional pagination
get-streamsreadGet streams for the user
get-task-by-idreadGet a specific task by its ID
get-tasks-backlogreadGet tasks from the backlog
get-tasks-by-dayreadGet tasks for a specific day with optional filtering by completion status
get-userreadGet current user information including profile, timezone, and group details
reorder-taskreadReorder a task within a day by moving it to a specific 0-based position (0 = top)
uncomplete-subtaskreadMark a subtask as incomplete (uncomplete it)
update-calendar-eventwriteUpdate an existing calendar event. Requires the full CalendarEventUpdateData object — fetch the event first to get all required fields.
update-subtask-titlewriteUpdate the title of a subtask
update-task-backlogwriteMove a task to the backlog
update-task-backlog-bulkwriteMove multiple tasks to the backlog in a single operation. Individual failures do not block others.
update-task-completewriteMark a task as complete with optional completion timestamp
update-task-complete-bulkwriteMark multiple tasks as complete in a single operation. Individual failures do not block others.
update-task-due-datewriteUpdate the due date for a task
update-task-noteswriteUpdate the notes content for a task
update-task-planned-timewriteUpdate the planned time (time estimate) for a task
update-task-snooze-datewriteUpdate task snooze date to reschedule tasks or move them to backlog
update-task-snooze-date-bulkwriteReschedule multiple tasks to a specific date in a single operation. Individual failures do not block others.
update-task-streamwriteUpdate the stream/channel assignment for a task
update-task-textwriteUpdate the text/title of a task
update-task-uncompletewriteMark a completed task as incomplete
update-task-uncomplete-bulkwriteMark multiple completed tasks as incomplete in a single operation. Individual failures do not block others.
04

Trust audit

SAFEgrade B · trust 88/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codePASS
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
none-observed
Shell
none-observed
Dependencies
not all pinned
Secrets in source
none-found

Findings (7)

MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
delete-task, delete-task-bulk
Why it matters. 2 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
__tests__/unit/auth/http.test.ts:2
import { parseBasicAuth } from "../../../src/auth/http.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
__tests__/unit/config/session-config.test.ts:2
import { getSessionConfig } from "../../../src/config/session-config.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
__tests__/unit/session/session-manager.test.ts:2
import { SessionManager } from "../../../src/session/session-manager.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
__tests__/unit/session/session-manager.test.ts:3
import type { SessionData } from "../../../src/auth/types.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
__tests__/unit/tools/api-coverage.test.ts:13
"../../../node_modules/sunsama-api/dist/types/client",
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@types/papaparse, cors, express, papaparse, @changesets/cli, @types/bun, @types/cors, @types/express
Why it matters. 9 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha 9d372a679047full audit observations/trust-audit/mcp-server/robertn702__sunsama.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-089d372a679047SAFEB88first audit
06

Questions

What tools does Sunsama expose?

30 in total: 9 read-only, 19 that write, and 2 that can delete or overwrite (delete-task, delete-task-bulk). Every one is listed on this page with its risk.

Is Sunsama safe to connect to an agent?

The audit found nothing in the source that contradicts what it says it does, and graded it B (88/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does Sunsama need?

It reads SUNSAMA_PASSWORD, SUNSAMA_PASSWORD_2 and SUNSAMA_SESSION_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does Sunsama run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as mcp-sunsama at 0.19.1.

How current is this page?

The grade is for one exact copy of the source (9d372a679047), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement