Freedcamp MCP Server
Enables to manage Freedcamp projects, tasks, users, and comments through natural language with HMAC-SHA1 authentication and name resolution.
README
Freedcamp MCP Server
A Model Context Protocol server that wraps the Freedcamp REST API. It lets any MCP-compatible LLM client (Claude Code, Claude Desktop, etc.) manage Freedcamp projects, tasks, users, and comments through natural language.
Features
- 17 tools covering projects, tasks, users, comments, and health checks
- HMAC-SHA1 authentication — the API secret never leaves the server; only a signed hash is sent per request
- Name resolution — pass user names, emails, or project names instead of raw numeric IDs; the server resolves them automatically with TTL-based caching
- Field limiting — request only the fields you need with dot-notation (
id,title,comments.created_ts) to reduce response size - Status label mapping — accept human-readable strings like
"in progress"instead of numeric codes - Response filtering — internal API fields are automatically stripped from responses
- Graceful shutdown — drains in-flight requests before exiting
- Retry + backoff — retries on 429 and 5xx with exponential backoff
- No build step — runs TypeScript directly via tsx
Prerequisites
- Node.js >= 18
- A Freedcamp account with API credentials (Settings → API)
Installation
git clone https://github.com/mahrukh-n8n/freedcampMCP.git
cd freedcampMCP
npm install
Configuration
Option A: .env file
cp .env.example .env
# Edit .env with your Freedcamp API key and secret
Option B: Claude Code MCP settings
No .env file needed — pass credentials as environment variables:
claude mcp add freedcamp npx tsx /path/to/freedcampMCP/scripts/mcp-server.ts \
-e FREEDCAMP_API_KEY=your_key \
-e FREEDCAMP_API_SECRET=your_secret
Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
FREEDCAMP_API_KEY |
Yes | — | Freedcamp API key |
FREEDCAMP_API_SECRET |
Yes | — | Freedcamp API secret |
FREEDCAMP_API_URL |
No | https://freedcamp.com |
Base URL (for self-hosted) |
LOG_LEVEL |
No | info |
Log level: debug, info, warn, error |
REQUEST_TIMEOUT_MS |
No | 30000 |
HTTP request timeout (ms) |
CACHE_TTL_MS |
No | 60000 |
Name resolution cache TTL (ms) |
MAX_CONCURRENT_REQUESTS |
No | 6 |
Max concurrent API requests |
Running
With Claude Code (recommended)
After adding the MCP server with claude mcp add, just start a conversation. Claude will call tools automatically when needed.
With MCP Inspector
npx @modelcontextprotocol/inspector npx tsx scripts/mcp-server.ts
Opens a browser UI where you can call each tool and inspect responses.
Direct (stdio)
npx tsx scripts/mcp-server.ts
The server listens on stdin/stdout using the MCP stdio transport. The host process (Claude Code, Claude Desktop) manages its lifecycle.
Tools
Health
| Tool | Description |
|---|---|
health.check |
Verify API credentials and connection status |
Projects
| Tool | Write | Description |
|---|---|---|
project.list |
List projects (paginated, sortable, field-limitable) | |
project.get |
Get project by ID or name | |
project.create |
Yes | Create a project (name, description, color, group, members) |
project.update |
Yes | Update project fields (partial update) |
Tasks
| Tool | Write | Description |
|---|---|---|
task.list |
List tasks with filters (assignee, status, date range, search, tags) | |
task.get |
Get task by ID with comments and tag detail; injects task_url |
|
task.create |
Yes | Create task (status labels accepted, file attachments) |
task.update |
Yes | Update task fields (partial update, file attachments) |
task.delete |
Yes | Delete a task |
task.assign |
Yes | Assign users to a task |
Users
| Tool | Write | Description |
|---|---|---|
user.list |
List users (optionally filter by project) | |
user.get |
Get user by ID, email, or name | |
user.current |
Get authenticated user's profile | |
user.create |
Yes | Create user (email, password, first_name, OAuth) |
user.update_current |
Yes | Update authenticated user's profile |
Comments
| Tool | Write | Description |
|---|---|---|
comment.add |
Yes | Add a comment (requires item_id + app_id) |
comment.update |
Yes | Update comment text |
comment.delete |
Yes | Delete a comment |
Name Resolution
Most ID parameters accept names, emails, or numeric IDs. Examples:
project_id: "Marketing"— resolves to the project's numeric IDassigned_to_id: "alice@example.com"— resolves to the user's numeric IDassigned_to_id: ["Alice", 42]— mixed lists accepted
Resolution results are cached with a configurable TTL (CACHE_TTL_MS).
Status Mapping
Task status accepts both numeric codes and string labels:
| Code | Label |
|---|---|
| 0 | not started |
| 1 | in progress |
| 2 | completed |
Example: status: "in progress" is equivalent to status: 1.
Field Limiting
All list and get tools accept a fields parameter with dot-notation paths:
fields="id,title,priority,comments.created_ts"
This reduces response size and focuses the LLM on relevant data. Nested arrays are preserved — comments.created_ts on [{created_ts: 1}] yields [{created_ts: 1}], not a flat list.
App ID Constants (for comments)
| App | ID |
|---|---|
| tasks | 2 |
| milestones | 3 |
| discussions | 5 |
| files | 6 |
| time | 8 |
| issue_tracker | 9 |
Authentication
The server uses HMAC-SHA1 authentication. On every request:
- A Unix timestamp is generated
- A hash is computed:
HMAC-SHA1(secret, apiKey + timestamp) - Auth params are sent as query string:
?api_key=...×tamp=...&hash=...
The secret never goes over the wire. At boot, the server validates credentials with GET /api_key/check.
Error Codes
| Code | Meaning |
|---|---|
PERMISSION_DENIED |
Invalid API key/secret or insufficient access |
NOT_FOUND |
Requested resource or name resolution target does not exist |
VALIDATION_ERROR |
Invalid input parameters |
CONFLICT |
Resource already exists |
INTERNAL_ERROR |
Server error, rate limit, or network failure |
Development
# Type check
npx tsc --noEmit
# Run tests
npx vitest run
# Watch mode
npx vitest
# Run server in dev mode
npm run dev
Testing
The test suite uses Vitest with mocked API responses:
npx vitest run # Single run
npx vitest # Watch mode
npx vitest --coverage # With coverage
Project Structure
scripts/mcp-server.ts Entry point
src/lib/freedcamp/
api-client.ts HTTP client with HMAC auth, retry, filtering
register-tools.ts Wire all tools to the MCP registry
auth/hmac.ts HMAC-SHA1 computation
auth/hmac-validator.ts Boot-time credential validation
tools/
health.ts health.check
projects.ts project.list/get/create/update
tasks.ts task.list/get/create/update/delete/assign
users.ts user.list/get/current/create/update_current
comments.ts comment.add/update/delete
utils/
name-resolver.ts Name/email → ID resolution with caching
response-filter.ts Strip internal fields from API responses
field-limiter.ts Dot-notation field extraction
date-utils.ts Date validation and formatting
resolution-cache.ts TTL-based LRU cache
logger.ts Structured logging with verbose mode
validation.ts Input validation helpers
src/modules/mcp/
registry/tool-registry.ts MCP tool registry
services/create-mcp-server.ts MCP server factory
services/stdio-transport.ts Stdio transport
types.ts MCP result types
utils/serialize.ts Result envelope helpers (dataResult, commitResult, etc.)
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.