API & MCP Docs

Integrate Simple Stickers with AI agents, Claude, and automation scripts

πŸ”‘

Authentication

Both the REST API and MCP server use Bearer token authentication via an API key.

Token type Lifetime How to obtain
ss_<40 hex chars> β€” API key Long-lived β€” valid until revoked Generate in Account Settings β†’ API tab

πŸ”§ Generating an API Key

  1. 1 Open Simple Stickers and click your avatar in the top right
  2. 2 Go to Account Settings β†’ API tab
  3. 3 Click Generate API Key, optionally give it a name
  4. 4
    Copy the key immediately β€” it is shown only once

    The key starts with ss_ followed by 40 hex characters.

πŸ“€ Using the Token

Pass the token in every request as a Bearer Authorization header:

Authorization: Bearer ss_a1b2c3d4e5f6...

API keys are scoped to the user who created them. All data operations return only that user's data.

πŸ“‘

REST API

🌐 Endpoint

POST https://www.simplestickers.app/api/agent Content-Type: application/json Authorization: Bearer <token>

πŸ“¨ Request Body

All actions share the same JSON envelope:

{ "action": "<action_name>", "<param>": "<value>" }

πŸ“¬ Responses

  • 200 OK Success β€” JSON data in body
  • 4xx / 5xx Error β€” {"error": "message"}
πŸ“

Projects

list_projects

Returns all projects belonging to the authenticated user.

curl -s -X POST https://www.simplestickers.app/api/agent \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"action":"list_projects"}'

Response: array of {"id","name","created_at"} objects.

find_project

Case-insensitive partial name search. Returns an array of matching projects.

curl -s -X POST https://www.simplestickers.app/api/agent \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"action":"find_project","name":"My Work"}'
ParameterTypeRequired
namestringYes

create_project

Creates a new project. Returns the created project object.

curl -s -X POST https://www.simplestickers.app/api/agent \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"action":"create_project","name":"Q3 Campaign"}'
ParameterTypeRequired
namestringYes

rename_project

Renames an existing project.

curl -s -X POST https://www.simplestickers.app/api/agent \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"action":"rename_project","project_id":"<uuid>","name":"New Name"}'
ParameterTypeRequired
project_idstring (UUID)Yes
namestringYes

delete_project

Deletes a project and all its tasks (cascade). Returns {"success":true}.

curl -s -X POST https://www.simplestickers.app/api/agent \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"action":"delete_project","project_id":"<uuid>"}'
⚠️ Irreversible. All tasks in the project are permanently deleted.
πŸ“

Tasks

list_tasks

Returns tasks in a project, ordered by position. Optionally filtered by status.

curl -s -X POST https://www.simplestickers.app/api/agent \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"action":"list_tasks","project_id":"<uuid>"}' # Filter by status: -d '{"action":"list_tasks","project_id":"<uuid>","status":"in_progress"}'
ParameterTypeRequiredDescription
project_idstring (UUID)Yes
statusstringNoFilter by status value (see enum below)

get_task

Returns a single task by ID, including its project_id.

curl -s -X POST https://www.simplestickers.app/api/agent \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"action":"get_task","task_id":"<uuid>"}'

create_task

Creates a new task in a project. Returns the created task object.

curl -s -X POST https://www.simplestickers.app/api/agent \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "action": "create_task", "project_id": "<uuid>", "text": "Write unit tests", "priority": true, "color": "yellow", "deadline": "2026-06-30", "notes": "## Context\n\n- Cover happy path\n- Cover edge cases" }'
ParameterTypeRequiredDefault
project_idstring (UUID)Yes
textstringYes
statusstringNobacklog
notesstring (Markdown)Nonull
prioritybooleanNofalse
colorstring | nullNonull (white)
deadlinestring (YYYY-MM-DD) | nullNonull

update_task

Updates one or more fields of an existing task. At least one optional field must be provided.

# Move task to in_progress: curl -s -X POST https://www.simplestickers.app/api/agent \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"action":"update_task","task_id":"<uuid>","status":"in_progress"}' # Update multiple fields at once: -d '{"action":"update_task","task_id":"<uuid>","priority":true,"color":"green","deadline":null}'
ParameterTypeRequired
task_idstring (UUID)Yes
textstringNo
statusstringNo
notesstring (Markdown) | nullNo
prioritybooleanNo
colorstring | nullNo
deadlinestring (YYYY-MM-DD) | nullNo

delete_task

Permanently deletes a task. Returns {"success":true}.

curl -s -X POST https://www.simplestickers.app/api/agent \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"action":"delete_task","task_id":"<uuid>"}'

πŸ“‹ Enum Values

status

  • backlog
  • in_progress
  • review
  • testing
  • done

color

  • yellow
  • green
  • blue
  • null (white)

deadline

YYYY-MM-DD string, or null to clear.

priority

true = high priority
false = normal

πŸ“„

Task Notes (Markdown)

Task notes are stored and transmitted as plain Markdown strings. The frontend renders them via react-markdown. Always write and read Markdown β€” not HTML.

Syntax Result
**text**Bold
*text*Italic
~~text~~Strikethrough
## HeadingH2 heading
### HeadingH3 heading
- itemBullet list
1. itemNumbered list
`code`Inline code
```\ncode\n```Code block
> textBlockquote
[text](url)Hyperlink

πŸ“‹ Example note in create_task

"notes": "## Task overview\n\n- Requirement 1\n- Requirement 2\n\n**Important:** deadline is Friday\n\n[Design brief](https://example.com/brief)"
Legacy notes: Notes saved before the Markdown migration may contain HTML. The frontend converts them automatically on display. When reading via the API, old notes may return HTML strings β€” always write Markdown, be tolerant when reading.
βš™οΈ

Settings

get_column_settings

Returns the user's Kanban column visibility settings.

curl -s -X POST https://www.simplestickers.app/api/agent \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"action":"get_column_settings"}'

Example response:

{ "columns": { "backlog": true, "in_progress": true, "review": false, "testing": false, "done": true } }

columns is null if the user has not customised column visibility (all defaults apply).

❌

Error Reference

HTTP status error value Meaning
401 Unauthorized Missing or invalid token
400 Missing <param> Required parameter not provided
400 Unknown action Action name not recognised
403 Key management requires JWT authentication Tried to manage keys with an API key token
500 varies Unexpected server error
πŸ€–

MCP Integration

What is MCP?

MCP (Model Context Protocol) is a standard that lets AI clients (Claude Code, Claude Desktop, Cursor…) connect to external tools. Unlike the REST API, the MCP server describes itself β€” the client asks which tools exist, then calls them directly without needing to know URLs or request formats.

βœ… Use MCP when…

  • β€’ You want Claude to manage your tasks conversationally
  • β€’ You need the AI to discover available operations on its own
  • β€’ You prefer a plug-and-play integration with Claude Code / Claude Desktop
  • β€’ You want to use natural language instead of writing curl commands

πŸ“‘ Use REST API when…

  • β€’ You are building your own automation scripts or CI pipelines
  • β€’ You need fine-grained control over HTTP requests
  • β€’ You are integrating with systems that don't support MCP
  • β€’ You want to process responses programmatically

πŸ› οΈ Available MCP Tools

list_projects

find_project

create_project

rename_project

delete_project

get_column_settings
list_tasks

get_task

create_task

update_task

delete_task
MCP endpoint: https://www.simplestickers.app/api/mcp (Streamable HTTP transport, JSON-RPC 2.0)
πŸ’»

Claude Code Setup

Claude Code supports HTTP MCP servers natively β€” no proxy needed. Configure once globally or per project.

🌐 Global config β€” ~/.claude/mcp.json

Applies to all Claude Code sessions on your machine:

{ "mcpServers": { "simplestickers": { "type": "http", "url": "https://www.simplestickers.app/api/mcp", "headers": { "Authorization": "Bearer ss_your_api_key_here" } } } }

πŸ“ Per-project config β€” .mcp.json in project root

Same format as global config β€” applies only when working inside that directory:

{ "mcpServers": { "simplestickers": { "type": "http", "url": "https://www.simplestickers.app/api/mcp", "headers": { "Authorization": "Bearer ss_your_api_key_here" } } } }

βœ… Verify the connection

After saving the config, open Claude Code and type:

/mcp

You should see simplestickers listed with all 11 available tools. If the server shows as disconnected, click Reconnect.

πŸ–₯️

Claude Desktop Setup

Important: Claude Desktop does not support HTTP MCP transport directly β€” it uses stdio transport only. Use mcp-remote as a proxy. The -y flag auto-approves the npm install without interactive prompts.

🍎 macOS

Config file: ~/Library/Application Support/Claude/claude_desktop_config.json

{ "mcpServers": { "simplestickers": { "command": "npx", "args": [ "-y", "mcp-remote", "https://www.simplestickers.app/api/mcp", "--header", "Authorization: Bearer ss_your_api_key_here" ] } } }

πŸͺŸ Windows

Config file: %APPDATA%\Claude\claude_desktop_config.json

(typically C:\Users\<name>\AppData\Roaming\Claude\claude_desktop_config.json)

On Windows, Claude Desktop launches processes without a shell context, so npx must be wrapped in cmd /c:

{ "mcpServers": { "simplestickers": { "command": "cmd", "args": [ "/c", "npx", "-y", "mcp-remote", "https://www.simplestickers.app/api/mcp", "--header", "Authorization: Bearer ss_your_api_key_here" ] } } }
After editing the config, restart Claude Desktop. You should see the Simple Stickers tools appear in the tool list inside a conversation.
πŸ’‘

Quick Examples

πŸ“‘ Complete REST workflow β€” find project β†’ create task β†’ update status

BASE="https://www.simplestickers.app/api/agent" TOKEN="ss_your_api_key_here" # 1. Find the project curl -s -X POST $BASE \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"action":"find_project","name":"My Work"}' # 2. Create a task (use project_id from step 1) curl -s -X POST $BASE \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "action": "create_task", "project_id": "<project-uuid>", "text": "Write unit tests", "priority": true, "color": "yellow" }' # 3. Move task to in_progress (use task id from step 2) curl -s -X POST $BASE \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "action": "update_task", "task_id": "<task-uuid>", "status": "in_progress" }' # 4. Mark as done curl -s -X POST $BASE \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"action":"update_task","task_id":"<task-uuid>","status":"done"}'

πŸ€– MCP workflow in Claude Code

Once the MCP server is configured, you can talk to Claude naturally:

You: Find my "Website Redesign" project and list all tasks that are in_progress
You: Create a high-priority task "Fix mobile navigation" with a deadline of 2026-06-30 and add notes with a checklist
You: Move all tasks named "Deploy *" to done status

Claude uses the MCP tools automatically based on your natural language instructions.

πŸ”¬ Test MCP server directly with curl

BASE="https://www.simplestickers.app/api/mcp" TOKEN="ss_your_api_key_here" # Handshake (no auth needed) curl -s -X POST $BASE \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{}},"id":1}' # List tools curl -s -X POST $BASE \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"tools/list","params":{},"id":2}' # Call a tool curl -s -X POST $BASE \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"list_projects","arguments":{}},"id":3}'