Skip to main content
Glama
gabeosx

freedcamp

by gabeosx

Freedcamp MCP Server

npm version license build downloads node GitHub All Releases

This is a Model Context Protocol (MCP) server implementation for Freedcamp task management. It provides tools for creating, updating, listing, and deleting tasks in Freedcamp projects with support for bulk operations.

Available Transport Methods:

  • STDIO Transport - Traditional MCP transport for IDE integrations (Claude Desktop, Cursor, etc.)

  • HTTP Transport - Modern REST API with Server-Sent Events for web applications and cloud deployments

Features

  • Create multiple tasks in a single operation with title, description, priority, due date, and assignee

  • Update existing tasks including status changes

  • List all tasks in a project

  • Delete tasks permanently

  • Bulk operations support for all task management operations

  • Environment variable support for credentials

  • Comprehensive error handling and validation

Related MCP server: MCP Tasks

Prerequisites

  • Node.js 17 or higher

  • TypeScript

  • Freedcamp account with API access

  • API Key and Secret from Freedcamp

  • Project ID from Freedcamp

Installation (for manual invocation only, not necessary for usage with an IDE or other MCP desktop client)

  1. Clone the repository:

git clone <repository-url>
cd freedcamp-mcp
  1. Install dependencies:

npm install
  1. Create a .env file in the root directory with your Freedcamp credentials:

FREEDCAMP_API_KEY=your_api_key
FREEDCAMP_API_SECRET=your_api_secret
FREEDCAMP_PROJECT_ID=your_project_id

Usage

Running the Server

First build the TypeScript code:

npm run build

STDIO Transport (Default)

This is the traditional transport method used by IDEs and MCP clients:

npm start

HTTP Transport

For containerized deployments and HTTP-based integrations:

Development (with .env file):

npm run start:http:test

Production (with environment variables):

npm run start:http

Direct execution:

# With environment variables
FREEDCAMP_API_KEY=your_key FREEDCAMP_API_SECRET=your_secret FREEDCAMP_PROJECT_ID=your_project npm run start:http

# Or using npx
npx freedcamp-mcp --http

The HTTP server will start on port 3000 (or the port specified by the PORT environment variable) and provide:

  • MCP endpoint: http://localhost:3000/mcp

  • Health check: http://localhost:3000/health

HTTP Transport Features:

  • Stateless operation - each request is independent

  • JSON responses with proper error handling

  • CORS support for web applications

  • Built-in health monitoring

  • Suitable for load balancing and clustering

Docker Deployment

For production deployments, you can use Docker to run the HTTP transport:

  1. Create a .env file with your Freedcamp credentials:

FREEDCAMP_API_KEY=your_api_key
FREEDCAMP_API_SECRET=your_api_secret
FREEDCAMP_PROJECT_ID=your_project_id
  1. Start the service:

docker-compose up -d

Using Docker directly

# Build the image
docker build -t freedcamp-mcp .

# Run the container
docker run -d \
  --name freedcamp-mcp \
  -p 3000:3000 \
  -e FREEDCAMP_API_KEY=your_api_key \
  -e FREEDCAMP_API_SECRET=your_api_secret \
  -e FREEDCAMP_PROJECT_ID=your_project_id \
  freedcamp-mcp

The containerized server provides the same MCP functionality via HTTP transport, making it suitable for:

  • Cloud deployments

  • Kubernetes environments

  • Load-balanced setups

  • Integration with HTTP-based MCP clients

Running the Test Harness

The project includes comprehensive test harnesses that verify all MCP functionality for both transport methods:

STDIO Transport Test:

npm test

HTTP Transport Test:

npm run test:http

Both test harnesses perform the following checks:

  1. Server initialization with proper protocol version

  2. Tool listing and capability verification

  3. Single task creation, update, and deletion

  4. Bulk task operations (create, update, delete)

  5. Task listing and verification

  6. Error handling and edge cases

Note: The HTTP test harness requires the HTTP server to be running. Use npm run start:http:test to start the server with test environment variables loaded.

Available Tools

  1. freedcamp_add_task

    • Creates one or more new tasks in Freedcamp

    • Input: Object with tasks array containing task details

    • Task Parameters:

      • title (required): Task title - should be clear and descriptive

      • description (optional): Detailed description of what the task involves

      • priority (optional): Task priority level (0=Low, 1=Normal, 2=High, 3=Urgent)

      • due_date (optional): Due date as Unix timestamp string (e.g., '1735689600' for 2025-01-01)

      • assigned_to_id (optional): User ID to assign the task to (must be valid Freedcamp user ID)

  2. freedcamp_update_task

    • Updates one or more existing tasks in Freedcamp

    • Input: Object with tasks array containing task updates

    • Task Parameters:

      • task_id (required): ID of the task to update (must be valid existing Freedcamp task ID)

      • title (optional): New task title

      • description (optional): New task description

      • priority (optional): New task priority (0=Low, 1=Normal, 2=High, 3=Urgent)

      • due_date (optional): New due date as Unix timestamp string

      • assigned_to_id (optional): User ID to reassign the task to

      • status (optional): New task status (0=Open, 1=Completed, 2=Closed)

  3. freedcamp_list_tasks

    • Retrieves all tasks in the configured Freedcamp project

    • No parameters required (uses project ID from environment variables)

    • Returns task details including ID, title, status, and other metadata

  4. freedcamp_delete_task

    • Permanently deletes one or more tasks from Freedcamp

    • Input: Object with tasks array containing task IDs to delete

    • Task Parameters:

      • task_id (required): ID of the task to delete (WARNING: This action cannot be undone)

Example Usage

Creating multiple tasks:

{
  "tasks": [
    {
      "title": "Setup project structure",
      "description": "Initialize the basic project folder structure",
      "priority": 2,
      "due_date": "1735689600"
    },
    {
      "title": "Implement authentication",
      "description": "Add user login and registration functionality",
      "priority": 3,
      "assigned_to_id": "12345"
    }
  ]
}

Updating multiple tasks:

{
  "tasks": [
    {
      "task_id": "67890",
      "status": 1,
      "description": "Updated: Added OAuth integration"
    },
    {
      "task_id": "67891",
      "priority": 3,
      "due_date": "1735776000"
    }
  ]
}

Deleting multiple tasks:

{
  "tasks": [
    {
      "task_id": "67892"
    },
    {
      "task_id": "67893"
    }
  ]
}

IDE Integration

The server can be run directly using npx without cloning the repository. Choose between STDIO transport (traditional) or HTTP transport (modern) based on your needs.

Cursor

Option 1: STDIO Transport (Default)

  1. Open (or create) .cursor/mcp.json in your project root.

  2. Add your Freedcamp MCP server configuration:

    {
      "mcpServers": {
        "freedcamp": {
          "command": "npx",
          "args": ["freedcamp-mcp"],
          "env": {
            "FREEDCAMP_API_KEY": "your_api_key",
            "FREEDCAMP_API_SECRET": "your_api_secret",
            "FREEDCAMP_PROJECT_ID": "your_project_id"
          }
        }
      }
    }
  3. Restart Cursor or reload MCP servers.

Option 2: HTTP Transport

  1. First, start the HTTP server (in a separate terminal):

    npx freedcamp-mcp --http
    # Or with environment variables:
    FREEDCAMP_API_KEY=your_key FREEDCAMP_API_SECRET=your_secret FREEDCAMP_PROJECT_ID=your_project npx freedcamp-mcp --http
  2. Configure Cursor to use HTTP transport:

    {
      "mcpServers": {
        "freedcamp": {
          "transport": "http",
          "url": "http://localhost:3000/mcp"
        }
      }
    }
  3. Restart Cursor or reload MCP servers.

Claude Desktop

Option 1: STDIO Transport (Default)

  1. Open (or create) ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%/Claude/claude_desktop_config.json on Windows.

  2. Add your Freedcamp MCP server configuration:

    {
      "mcpServers": {
        "freedcamp": {
          "command": "npx",
          "args": ["freedcamp-mcp"],
          "env": {
            "FREEDCAMP_API_KEY": "your_api_key",
            "FREEDCAMP_API_SECRET": "your_api_secret",
            "FREEDCAMP_PROJECT_ID": "your_project_id"
          }
        }
      }
    }
  3. Restart Claude Desktop.

Option 2: HTTP Transport

  1. Start the HTTP server:

    npx freedcamp-mcp --http
  2. Configure Claude Desktop to use HTTP transport:

    {
      "mcpServers": {
        "freedcamp": {
          "transport": "http",
          "url": "http://localhost:3000/mcp"
        }
      }
    }
  3. Restart Claude Desktop.

Roo

Option 1: STDIO Transport (Default)

  1. Open (or create) your Roo MCP config file (commonly roo.mcp.json or similar).

  2. Add your Freedcamp MCP server configuration:

    {
      "mcpServers": {
        "Freedcamp": {
          "transport": "stdio",
          "command": "npx",
          "args": ["freedcamp-mcp"],
          "env": {
            "FREEDCAMP_API_KEY": "your_api_key",
            "FREEDCAMP_API_SECRET": "your_api_secret",
            "FREEDCAMP_PROJECT_ID": "your_project_id"
          }
        }
      }
    }

Option 2: HTTP Transport

  1. Start the HTTP server:

    npx freedcamp-mcp --http
  2. Configure Roo to use HTTP transport:

    {
      "mcpServers": {
        "Freedcamp": {
          "transport": "http",
          "url": "http://localhost:3000/mcp"
        }
      }
    }

API Reference

For detailed information about Freedcamp's API, visit: https://freedcamp.com/api-docs

License

MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Available Tools

4 tools
freedcamp_add_taskA

Create one or more new tasks in Freedcamp with support for title, description, priority, due date, and assignee. Supports bulk operations for creating multiple tasks at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
tasksYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations only provide a title ('Create Task'), so the description carries the burden. It discloses that the tool creates tasks and supports bulk operations, which is useful context beyond annotations. However, it lacks details on permissions, rate limits, or what happens on failure, which are important for a creation tool with no output schema.

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?

The description is two sentences, front-loaded with the main purpose and followed by key features. Every sentence adds value: the first defines the action and scope, the second highlights bulk capability and supported fields, with no wasted words.

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?

Given no output schema and annotations only providing a title, the description is somewhat complete for a creation tool but lacks details on return values, error handling, or prerequisites. It covers the basics but could be more informative for a tool with 1 parameter (an array of objects) and no structured output documentation.

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?

Schema description coverage is 0%, so the description must compensate. It lists supported fields (title, description, priority, due date, assignee) and mentions bulk operations, adding meaning beyond the schema's structure. However, it does not explain the 'tasks' array parameter's semantics or constraints in detail.

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?

The description clearly states 'Create one or more new tasks in Freedcamp' with specific verb (create) and resource (tasks), and distinguishes from siblings by focusing on creation rather than deletion, listing, or updating mentioned in sibling tool names.

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?

The description implies usage for creating tasks and mentions 'bulk operations for creating multiple tasks at once,' which provides context for when to use it (multiple tasks). However, it does not explicitly state when not to use it or name alternatives like the sibling tools for other operations.

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

freedcamp_delete_taskA

Permanently delete one or more tasks from Freedcamp. WARNING: This action cannot be undone. Supports bulk operations for deleting multiple tasks at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
tasksYes

TDQS

A4.6/5.0
Behavior5/5

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

The description adds significant behavioral context beyond what annotations provide. Annotations only give a title ('Delete Task'), while the description explicitly warns that the action 'cannot be undone', clarifies it's permanent, and mentions support for bulk operations - all critical behavioral traits for a destructive operation.

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?

The description is perfectly concise with two sentences that each earn their place: the first states the core action with critical warning, the second adds important bulk operation capability. No wasted words, front-loaded with the most critical 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?

Given this is a destructive mutation tool with no output schema and minimal annotations, the description does well by warning about irreversibility and mentioning bulk operations. However, it could be more complete by specifying what happens to dependent objects or confirming deletion success criteria.

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?

With 0% schema description coverage (the schema has no parameter descriptions), the description carries the full burden. It adds meaningful context by explaining that the tool supports bulk operations for deleting multiple tasks at once, which helps interpret the 'tasks' array parameter structure, though it doesn't detail individual parameter semantics like 'task_id' format.

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?

The description clearly states the specific action ('permanently delete') and resource ('tasks from Freedcamp'), distinguishing it from sibling tools like 'add_task', 'list_tasks', and 'update_task' which perform different operations on the same resource.

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?

The description provides clear context for when to use this tool ('permanently delete one or more tasks') and mentions bulk operations, but does not explicitly state when NOT to use it or name specific alternatives like 'update_task' for modifications instead of deletions.

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

freedcamp_list_tasksB

Retrieve all tasks in the configured Freedcamp project. Returns task details including ID, title, description, status, priority, due date, and assignee information.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations only provide a title ('List Tasks'), so the description carries the burden of behavioral disclosure. It adds value by specifying the return format (task details like ID, title, status, etc.) and implying a read-only operation, but doesn't cover aspects like error handling, pagination, or rate limits. No contradiction with annotations exists.

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?

The description is a single, well-structured sentence that efficiently conveys the action, scope, and return details without redundancy. It's front-loaded with the core purpose, but could be slightly more concise by integrating the return information more seamlessly.

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?

Given the tool's simplicity (0 parameters, no output schema, minimal annotations), the description is adequate but has gaps. It explains what the tool does and what it returns, but lacks usage guidelines, error handling, or behavioral nuances. For a list tool with no complex inputs, this is minimally viable but not comprehensive.

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 input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately omits parameter details, focusing on the tool's function and output. This meets the baseline for zero parameters, but doesn't exceed expectations with extra context.

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 clearly states the verb ('Retrieve') and resource ('all tasks in the configured Freedcamp project'), making the purpose evident. It distinguishes from siblings by focusing on listing rather than adding, deleting, or updating tasks. However, it doesn't explicitly contrast with sibling tools, preventing a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'freedcamp_add_task' or 'freedcamp_update_task'. It lacks context about prerequisites (e.g., needing a configured project) or exclusions, leaving usage decisions to inference from the tool name alone.

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

freedcamp_update_taskB

Update one or more existing tasks in Freedcamp including title, description, priority, due date, assignee, and status. Supports bulk operations for updating multiple tasks at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
tasksYes

TDQS

B3.1/5.0
Behavior2/5

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

Annotations only provide a title ('Update Task'), so the description carries the full burden. It mentions bulk operations but lacks details on permissions, rate limits, error handling, or what happens to unspecified fields (e.g., whether they remain unchanged). This is inadequate for a mutation tool with no annotation coverage.

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?

The description is a single, efficient sentence that front-loads the core action and includes essential details like bulk support. It avoids redundancy but could be slightly more structured for clarity.

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?

For a mutation tool with no annotations, 0% schema description coverage, and no output schema, the description is incomplete. It lacks behavioral context (e.g., side effects, auth needs), detailed parameter guidance, and output information, making it insufficient for safe and effective use.

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 0%, but the description lists key updatable fields (title, description, priority, due date, assignee, status), which adds meaning beyond the bare schema. However, it doesn't explain the 'tasks' array structure or parameter constraints, leaving gaps in documentation.

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 clearly states the verb ('Update') and resource ('existing tasks in Freedcamp'), and lists specific fields that can be updated. It distinguishes itself from siblings by focusing on updates rather than adding, deleting, or listing tasks. However, it doesn't explicitly contrast with siblings beyond the core action.

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?

The description implies usage for updating tasks, including bulk operations, but doesn't provide explicit guidance on when to use this tool versus alternatives like 'freedcamp_add_task' for new tasks or 'freedcamp_delete_task' for removal. No exclusions or prerequisites are mentioned.

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. 4 tool updatesv1.0.0
    • First observedfreedcamp_add_task
    • First observedfreedcamp_delete_task
    • First observedfreedcamp_list_tasks
    • First observedfreedcamp_update_task

TDQS

A4/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose targeting different CRUD operations: add_task for creation, delete_task for deletion, list_tasks for retrieval, and update_task for modification. There is no overlap or ambiguity between these functions.

Naming Consistency5/5

All tools follow a consistent 'freedcamp_verb_task' pattern with snake_case, using clear action verbs (add, delete, list, update). This predictable naming makes it easy to understand each tool's function at a glance.

Tool Count5/5

Four tools is perfectly appropriate for a task management server, covering the essential CRUD operations without being overwhelming. Each tool earns its place with distinct functionality, and the count aligns well with the server's focused scope.

Completeness5/5

The tool set provides complete CRUD coverage for tasks in Freedcamp, including bulk operations for efficiency. There are no obvious gaps—agents can create, read, update, and delete tasks, covering the full lifecycle without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    A comprehensive and efficient Model Context Protocol server for task management that works with Claude, Cursor, and other MCP clients, providing powerful search, filtering, and organization capabilities across multiple file formats.
    5
    197 npm
    47
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server that exposes Kanboard API functionality to Large Language Models (LLMs), enabling AI assistants to interact with Kanboard project management system.
    2
    MIT