Runrun.it MCP Server
Provides tools to interact with the Runrun.it API, including retrieving task details, listing tasks with filters, and fetching authenticated user information.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Runrun.it MCP Serverlist my open tasks in project 7"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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-envandzod.Native Fetch: Uses native Node.js
fetchAPI.
Related MCP server: Todoist MCP Server
Prerequisites
Node.js (v18 or higher recommended)
Runrun.it API Credentials (App Key and User Token)
Installation
Clone or copy this project to your desired directory.
Install dependencies:
npm installConfigure your environment variables. Create a
.envfile 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.tsBuild and Run
Build the project:
npm run buildStart 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 --noEmitSource code is in
src/index.tsand environment validation insrc/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"
}
}
}
}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 toolsget_config_statusB
Check if environment variables are correctly loaded (MASKED)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the task to retrieve |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the task to retrieve |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of tasks to return (max 100) | |
| is_closed | No | Filter by closed status | |
| project_id | No | ID of the project the task belongs to | |
| responsible_id | No | ID of user responsible for the task |
TDQS
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.
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.
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.
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.
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.
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.
5 tool updates
v1.0.0- First observed
get_config_status - First observed
get_me - First observed
get_task - First observed
get_task_details - First observed
list_tasks
TDQS
Scored across 5 tools
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.
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.
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.
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
Related MCP Connectors
Read teams, spaces, lists and tasks; create, update and comment on tasks and track time.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Notes, kanban tasks, and a capture inbox: read and create Flow data with a personal token.
Related MCP Servers
- FlicenseBqualityDmaintenanceProvides tools to interact with the Linear API, allowing users to fetch tasks, task details, teams, and users from their Linear workspace.41-
- AlicenseNot gradedqualityDmaintenanceEnables task, project, section, label, and comment management via Todoist's API. Supports batch operations and pagination.MIT
- AlicenseNot gradedqualityDmaintenanceEnables to interact with Vikunja task management through its REST API, supporting projects, tasks, comments, labels, assignees, and relations with field preservation.16 npmMIT
- FlicenseCqualityDmaintenanceEnables AI assistants to manage Trackfusion projects and tasks, including listing, creating, updating, and filtering tasks.761-