Skip to main content
Glama

Runrun.it MCP Server

A Model Context Protocol (MCP) server for interacting with the Runrun.it API. https://runrun.it/api/documentation

Features

  • Get Task: Retrieve detailed information about a specific task by ID.

  • List Tasks: Query tasks with filters such as responsible user, project, and status.

  • Get Me: Fetch information about the currently authenticated user.

  • Strict Typing: Implemented with strict TypeScript configuration for reliability.

  • Safe Hardware: environment variable validation using t3-env and zod.

  • Native Fetch: Uses native Node.js fetch API.

Related MCP server: Todoist MCP Server

Prerequisites

  • Node.js (v18 or higher recommended)

  • Runrun.it API Credentials (App Key and User Token)

Installation

  1. Clone or copy this project to your desired directory.

  2. Install dependencies:

    npm install
  3. Configure your environment variables. Create a .env file in the root directory:

    RUNRUNIT_APP_KEY=your_app_key
    RUNRUNIT_USER_TOKEN=your_user_token

Usage

Direct execution (using tsx)

You can run the server directly using tsx (useful for development):

npx tsx src/index.ts

Build and Run

  1. Build the project:

    npm run build
  2. Start the server:

    node build/index.js

Available Tools

  • get_task({ id: number }): Returns details for a specific Runrun.it task.

  • list_tasks({ responsible_id?: string, project_id?: number, is_closed?: boolean, limit?: number }): Lists tasks based on filters.

  • get_me(): Returns current user information.

Development

The project uses a strict tsconfig.json and t3-env for environment variable validation.

  • Run type checks: npx tsc --noEmit

  • Source code is in src/index.ts and environment validation in src/env.ts.

Configuration for AI Clients (e.g., Claude Desktop)

To add this MCP server to an AI client like Claude Desktop, add the following to your configuration file (usually ~/.config/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "runrunit": {
      "command": "npx",
      "args": [
        "-y",
        "tsx",
        "/home/ygor@infotera.LOCAL/html/runrunit/src/index.ts"
      ],
      "env": {
        "RUNRUNIT_APP_KEY": "your_app_key",
        "RUNRUNIT_USER_TOKEN": "your_user_token"
      }
    }
  }
}
TIP

Make sure to use absolute paths for the command and script. If you have already built the project, you can usenode with the build/index.js path instead of tsx.

Available Tools

5 tools
get_config_statusB

Check if environment variables are correctly loaded (MASKED)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral burden. The parenthetical '(MASKED)' hints that secret values are redacted in the output, which is useful context, but nothing is said about whether this is a safe read, what constitutes 'correctly loaded', or what a failure signals.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the purpose front-loaded and no wasted words. The '(MASKED)' aside is slightly cryptic but does not bloat the text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description should indicate the shape of the result (boolean status, list of variables, error detail). It says only that it 'checks' something, leaving the agent unable to anticipate what it receives back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there are no parameter semantics to explain; the baseline for a parameterless tool applies. Nothing in the description conflicts with the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Check) and resource (environment variables loaded), so the agent knows this is a diagnostic status probe rather than an action on a resource. It is clearly distinct from the task-oriented siblings (get_task, list_tasks, get_me) without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implicit: the agent can infer this is for verifying env-var configuration, typically during setup or debugging. There are no sibling tools that overlap, so no explicit alternative routing is needed, but the description never states when to call it or what a bad result implies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_meA

Get information about the current authenticated user

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'Get information' implies a read-only, non-destructive operation and 'authenticated user' hints that an authenticated session is required, but the description discloses nothing about return shape, caching, rate limits, or error behavior for an unauthenticated caller.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler, and the resource (current authenticated user) is stated up front. Nothing is wasted and nothing needs reordering.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read tool the surface area is small, but there is no output schema and the description never says what 'information' is returned (id, email, name, scopes). An agent knows how to call it but not what to expect back, leaving a modest but real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the schema has nothing to document and the baseline is 4. The description correctly signals that the target user is implicit (the caller's own identity) rather than passed as an argument.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Get information about') and a specific resource ('the current authenticated user'), so the operation is unambiguous. It doesn't explicitly differentiate from siblings, but the siblings (get_task, list_tasks, get_config_status) operate on entirely different resources, so the distinction is self-evident.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the tool for identity/whoami lookups because the resource is 'the current authenticated user.' There is no explicit statement of when to use it, when not to, or any prerequisite (e.g., a valid session), and no alternative is named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_taskB

Get core information about a specific task (Title and Description). Use this for general context about what needs to be done.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the task to retrieve

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the returned fields (Title, Description), which is useful, but says nothing about auth requirements, error behavior for a missing id, or read-safety characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the returned scope front-loaded, and no wasted wording. It is efficient, though it omits sibling routing that a sentence could have carried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-param read tool with no output schema, describing the return fields (Title, Description) is adequate. The unresolved overlap with get_task_details is the notable gap that keeps this from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single required 'id' parameter, so the schema already documents it fully. The description adds no syntax, format, or constraint detail beyond what the schema provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (task) and scopes what it returns to Title and Description. However, it does not distinguish itself from the sibling get_task_details, leaving ambiguity about which 'get a task' tool is the right one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this for general context about what needs to be done' implies a usage context but names no alternatives and draws no boundary against get_task_details or list_tasks. The agent must infer when this is preferred over the more detailed sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_task_detailsA

Get the FULL, raw API response for a task. WARNING: This is very large. Only use if you specifically need technical fields, custom field values, or deep task metadata not available in get_task.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the task to retrieve

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose a genuinely useful behavioral trait — the response is "very large" — which warns the agent about context cost, and "raw API response" signals unstructured/verbose output. It omits auth requirements and error behavior, but for a read-only fetch those are minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste, and the critical warning plus the routing condition are front-loaded. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description does characterize the return (full raw API response) plus its size, so an agent knows what it is getting. It could say a bit more about what "technical fields" encompasses, but nothing essential to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single id parameter, so the schema already documents it fully. The description adds no syntax, format, or constraint detail about id beyond what the schema states, which is the expected baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Get the FULL, raw API response for a task") and immediately distinguishes itself from the sibling get_task by naming what the lighter tool lacks. An agent can tell which of the two task-fetching tools to pick without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit gating: "Only use if you specifically need technical fields, custom field values, or deep task metadata not available in get_task." This gives both the when-to-use condition and the alternative tool to prefer otherwise.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tasksA

List tasks with optional filters. Returns simplified task objects. Use this to find tasks by user, project, or status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of tasks to return (max 100)
is_closedNoFilter by closed status
project_idNoID of the project the task belongs to
responsible_idNoID of user responsible for the task

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral burden. It does disclose one real trait — results are 'simplified' task objects — but says nothing about default limit, ordering, pagination, or permission needs for a read endpoint spanning up to 100 records.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler, with the core action front-loaded and the return shape and use case following in logical order. Every sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with no output schema and full schema coverage on parameters, the description covers action, filters, and return shape adequately. Only default-limit/pagination behavior is left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (limit, is_closed, project_id, responsible_id) are already documented in the schema. The description restates the filter dimensions at a high level without adding syntax, defaults, or combination semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List tasks') and adds that it returns simplified task objects, which implicitly contrasts with the detail-oriented siblings get_task / get_task_details. The purpose is clear, though it never names a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this to find tasks by user, project, or status' gives a clear positive use context that maps to the available filters. It stops short of naming alternatives (e.g., get_task for a single task) or stating exclusions, so it does not reach the 5 bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 5 tool updatesv1.0.0
    • First observedget_config_status
    • First observedget_me
    • First observedget_task
    • First observedget_task_details
    • First observedlist_tasks

TDQS

A3.6/5.0

Scored across 5 tools

Disambiguation4/5

get_task and get_task_details overlap in retrieving a task, but the descriptions clearly distinguish core fields from the full raw API response with a size warning. The remaining tools (get_me, list_tasks, get_config_status) have distinct, non-overlapping purposes.

Naming Consistency5/5

All tool names use snake_case with consistent get_/list_ verb prefixes: get_task, get_task_details, get_me, list_tasks, get_config_status. The pattern is predictable throughout, including the slightly longer config-status tool.

Tool Count4/5

Five tools sits at the low end but still within a reasonable range for a focused integration. It covers task retrieval, user identity, and server configuration, though it leaves little room for broader Runrun.it workflows.

Completeness2/5

The surface only supports read access to tasks; there are no create, update, or delete task operations. No tools cover comments, projects, time tracking, or other core Runrun.it entities, creating significant dead ends for real task management workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers