COR MCP Server
The COR MCP Server exposes the full COR REST API as 61 MCP tools, enabling AI agents to manage projects and related entities across 11 functional areas:
Projects: List, create, read, update, delete projects; manage collaborators, costs, labels, ratecards, templates, and profitability.
Tasks: Search (with rich filters), get pending tasks, create/read/update/delete tasks; manage collaborators and labels.
Time Tracking: Log hours against tasks, search time entries, get entries by date, change entry status (approve/reject/pending), and accept suggested hours.
Clients: List, create, read, update, delete clients; retrieve client fees.
Contracts: List, get, and create contracts; manage contract positions.
Messaging: Read and post messages on projects and tasks (with @mention support).
Team & Users: View your profile, list/get users, list/create teams, add/remove users from teams, retrieve working time data.
Ratecards: List, get, and create ratecards.
Allocations: Get resource allocations by project, create/update allocations, delete allocations.
Products: List and create products.
Labels: Retrieve labels, optionally filtered by entity type (project, task, or user).
The server supports both user credentials (email/password) and client credentials (API key/secret) with OAuth token auto-refresh, dual transport (stdio for agents, sse for HTTP remote access), and Docker deployment.
Click on "Install 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., "@COR MCP Serverlist my open tasks"
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.
⬡ COR MCP Server
61 MCP tools for Project COR — the project management platform for creative and professional teams.
Exposes the complete COR REST API surface as MCP tools — usable from any MCP-compatible client: Hermes Agent, Claude Desktop, Cursor, Claude Code, Cline, Windsurf, and more.
✨ Features
61 MCP tools — full CRUD for all COR entities across 11 modules
Dual authentication — pick what suits you:
User Credentials (email + password) — quick personal use
Client Credentials (API key + client secret) — server-to-server
Async everywhere —
httpx+asyncio, non-blocking I/ODual transport —
stdio(default for agents) andsse(HTTP for remote access)OAuth token auto-refresh — never worry about expiry mid-session
Docker support — one-command deployment
Hermes Agent skill included — see
skills/cor-mcp-setup/24 passing tests — fully mocked, no live credentials required
Entity Coverage
Module | Tools | Covers |
Projects | 14 | CRUD, collaborators, costs, labels, ratecards, templates, profitability |
Tasks | 10 | Search, CRUD, collaborators, labels |
Team & Users | 8 | Profile, users, teams, working time |
Clients | 6 | CRUD, fees |
Contracts | 5 | CRUD, positions |
Time Tracking | 5 | Log, search, status, accept suggested |
Messaging | 4 | Project + task messages |
Allocations | 3 | CRUD |
Ratecards | 3 | CRUD |
Products | 2 | CRUD |
Labels | 1 | By entity type |
Related MCP server: Redmine MCP Server
🚀 Quick Start
Prerequisites
Python 3.11+
uv (recommended) or pip
COR account with credentials
Install & Run
# Clone
git clone https://github.com/fxckcode/mcp-cor.git
cd mcp-cor
# Install with uv (recommended)
uv sync
# Or with pip
pip install -e .Configure
cp .env.example .envThen choose one auth mode in .env:
Mode A — Email + Password (recommended for personal use)
COR_EMAIL=your.email@company.com
COR_PASSWORD=your_password
COR_API_URL=https://api.projectcor.com/v1Mode B — API Key + Client Secret (for server-to-server)
COR_API_KEY=your_api_key
COR_CLIENT_SECRET=your_client_secret
COR_API_URL=https://api.projectcor.com/v1The server auto-detects which mode you configured. Email/password takes priority when both are set.
Run
# stdio transport (default — for MCP agents)
uv run cor-mcp-server
# SSE/HTTP transport (for remote access)
uv run cor-mcp-server --transport sse --host 0.0.0.0 --port 8000
# Verbose logging
uv run cor-mcp-server --verbose🔐 Authentication
Two modes supported. The server auto-detects which to use.
User Credentials (Mode A)
POST https://api.projectcor.com/v1/auth/login
Content-Type: application/x-www-form-urlencoded
email=user@corp.com&password=*****Returns JWT access_token + refresh_token. Auto-refresh built in.
Client Credentials (Mode B)
POST https://api.projectcor.com/v1/oauth/token?grant_type=client_credentials
Authorization: Basic base64(api_key:client_secret)Returns access_token (1-hour TTL). Cached and auto-refreshed with a 60-second safety margin.
🔌 Connecting from MCP Clients
Add to ~/.hermes/config.yaml:
mcp_servers:
cor:
command: "uv"
args: ["run", "--directory", "/path/to/cor-mcp-server", "python", "-m", "cor_mcp_server"]
env:
COR_EMAIL: "your.email@company.com"
COR_PASSWORD: "your_password"
COR_API_URL: "https://api.projectcor.com/v1"
timeout: 180
connect_timeout: 60Then restart or run /reload-mcp.
Add to claude_desktop_config.json:
{
"mcpServers": {
"cor": {
"command": "uv",
"args": ["run", "--directory", "/path/to/cor-mcp-server", "python", "-m", "cor_mcp_server"],
"env": {
"COR_EMAIL": "your.email@company.com",
"COR_PASSWORD": "your_password",
"COR_API_URL": "https://api.projectcor.com/v1"
}
}
}
}In MCP Servers settings, add:
Name: COR
Type: command
Command:
uv run --directory /path/to/cor-mcp-server python -m cor_mcp_serverEnvironment variables:
COR_EMAIL,COR_PASSWORD,COR_API_URL
env COR_EMAIL=your@email.com COR_PASSWORD=your_pass COR_API_URL=https://api.projectcor.com/v1 \
npx @anthropic/claude-code --mcp "uv run --directory /path/to/cor-mcp-server python -m cor_mcp_server"Docker
docker build -t cor-mcp-server .
# stdio mode
docker run -i --rm \
-e COR_EMAIL=your@email.com \
-e COR_PASSWORD=your_password \
-e COR_API_URL=https://api.projectcor.com/v1 \
cor-mcp-server
# SSE mode
docker run -i --rm \
-p 8000:8000 \
-e COR_EMAIL=your@email.com \
-e COR_PASSWORD=your_password \
-e COR_API_URL=https://api.projectcor.com/v1 \
cor-mcp-server --transport sse🛠 Available Tools
All tool names are prefixed with cor_ for clean discoverability.
Projects (14 tools)
Tool | Description |
| List projects with filters (clientId, status, health, dates) |
| Get project details |
| Create a new project |
| Update a project (partial) |
| Delete a project |
| Get project collaborators |
| Add collaborator to project |
| Remove collaborator from project |
| Get project costs/estimates |
| Add cost to project |
| Get project labels |
| Get project ratecard |
| Get available project templates |
| Get project profitability |
Tasks (10 tools)
Tool | Description |
| Search tasks with filters (projectId, clientId, status, text, dates, labels) |
| Get my pending tasks |
| Get task details |
| Create a new task |
| Update a task |
| Delete a task |
| Get task collaborators |
| Sync (replace) task collaborators |
| Add label to task |
| Remove label from task |
Team & Users (8 tools)
Tool | Description |
| Get current user profile |
| List users with filters |
| Get user details |
| List teams |
| Create a new team |
| Add users to a team |
| Remove users from a team |
| Get working time for users |
Clients (6 tools)
Tool | Description |
| List clients |
| Get client details |
| Create a new client |
| Update a client |
| Delete a client |
| Get client fees |
Contracts (5 tools)
Tool | Description |
| List contracts |
| Get contract details |
| Create a new contract |
| Get contract positions |
| Create position in contract |
Time Tracking (5 tools)
Tool | Description |
| Log hours against a task |
| Search time entries with filters |
| Get time entries by date |
| Change time entry status |
| Accept suggested hours |
Messaging (4 tools)
Tool | Description |
| Get messages on a task |
| Post a message on a task |
| Get messages on a project |
| Post a message on a project |
Ratecards (3 tools)
Tool | Description |
| List ratecards |
| Get ratecard details |
| Create a new ratecard |
Allocations (3 tools)
Tool | Description |
| Get allocations for a project |
| Create/update a resource allocation |
| Delete a resource allocation |
Products (2 tools)
Tool | Description |
| List products |
| Create a new product |
Labels (1 tool)
Tool | Description |
| Get labels (filter by entity type: project, task, user) |
🏗 Architecture
┌──────────────────────┐ ┌───────────────────────────┐ ┌──────────────────────┐
│ MCP Client │ │ COR MCP Server │ │ COR REST API │
│ (Hermes / Claude / │◄───►│ (FastMCP + httpx) │────►│ api.projectcor.com │
│ Cursor / etc.) │ │ │ │ /v1 │
└──────────────────────┘ ├───────────────────────────┤ └──────────────────────┘
│ Auth auto-detection │
│ • Email/Password (prio) │
│ • API Key + Secret │
└───────────────────────────┘🧑💻 Development
# Install dev deps
uv sync --dev
# Run tests (24 passing tests — no live API needed, uses mocking)
uv run pytest tests/ -v
# Test server startup
uv run cor-mcp-server --help
# Lint
uv run ruff check .Adding New Tools
To add a new tool to the COR MCP Server:
Create or edit a tool module in
cor_mcp_server/tools/(e.g.,reports.py).Write an async function with the
cor_prefix pattern:from ..context import get_client async def cor_list_reports(page: int = 1, per_page: int = 20) -> str: """List reports. Args: page: Page number (default: 1) per_page: Results per page (default: 20) """ client = get_client() data = await client.get("/reports", page=page, per_page=per_page) import json return json.dumps(data, indent=2, ensure_ascii=False, default=str)Register the tool in
cor_mcp_server/server.py:from .tools import reports as _reports mcp.tool( name="cor_list_reports", description=_reports.cor_list_reports.__doc__, )(_reports.cor_list_reports)Add tests in
tests/test_tools.pyfollowing the existing patterns (import assertion + tool count update).Update the tool count in
tests/test_tools.pyif needed.
The get_client() function provides a fully-authenticated CORClient instance with automatic Bearer token handling. All tools return JSON strings for consistent serialization.
Test Structure
Tests are in tests/test_tools.py and cover:
TestTokenStore— Thread-safe token caching, expiry, and refresh logicTestCORClient— HTTP methods (GET, POST, PUT, DELETE), pagination, auth headersTestToolFunctions— Import verification for all 61 tool functions across 11 modulesTestServerCreation— Server factory creates a valid FastMCP instance
All tests use mocking — no live COR credentials required to run them.
📁 Project Structure
cor-mcp-server/
├── pyproject.toml # Dependencies and metadata
├── README.md # This file
├── LICENSE # MIT license
├── .env.example # Env var template (both auth modes)
├── Dockerfile # Container deployment
├── skills/ # Hermes Agent skills
│ └── cor-mcp-setup/
│ └── SKILL.md # Skill: setup + usage guide
├── handoff-personal-hermes.md # Self-contained instructions for personal Hermes
├── cor_mcp_server/
│ ├── __init__.py # Package init
│ ├── __main__.py # CLI entry point
│ ├── server.py # FastMCP server + tool registration (all 61 tools)
│ ├── auth.py # OAuth 2.0 dual-mode (user creds + client creds)
│ ├── client.py # COR API HTTP client (httpx, async)
│ ├── context.py # Shared client context / dependency injection
│ ├── models.py # Pydantic models (14 entity types)
│ └── tools/
│ ├── __init__.py
│ ├── projects.py # 14 tools
│ ├── tasks.py # 10 tools
│ ├── time_tracking.py # 5 tools
│ ├── clients.py # 6 tools
│ ├── contracts.py # 5 tools
│ ├── messaging.py # 4 tools
│ ├── team.py # 8 tools
│ ├── labels.py # 1 tool
│ ├── ratecards.py # 3 tools
│ ├── allocations.py # 3 tools
│ └── products.py # 2 tools
├── tests/
│ ├── __init__.py
│ └── test_tools.py # 24 tests for auth, client, and tools
├── .github/ # GitHub community files
│ ├── dependabot.yml # Dependency auto-updates
│ ├── ISSUE_TEMPLATE/ # Bug report + feature request templates
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/ # CI + Release pipelines
├── .gitignore
├── .gitattributes
├── CONTRIBUTING.md
├── CODE_OF_CONDUCT.md
└── SECURITY.md📄 License
👤 Author
Alejandro Duran — Omnicom Media Group
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceExposes the OpenProject REST API as MCP tools for project management, including creating and managing projects, work packages, relations, attachments, users, notifications, watchers, boards, and reference data.Last updated3734MIT
- AlicenseBqualityDmaintenanceMCP server for Redmine project management, enabling tools for managing projects, issues, users, time entries, groups, memberships, versions, wiki, news, attachments, search, and Agile sprints via the Redmine REST API.Last updated89151MIT
- Flicense-qualityDmaintenanceMCP server to interact with the Shortcut project management API, providing 73 tools for managing stories, epics, iterations, milestones, projects, and more.Last updated
- Alicense-qualityDmaintenanceMCP server exposing Basecamp CLI commands as tools for project management, todos, messages, and more.Last updatedMIT
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personal…
MCP server for generating rough-draft project plans from natural-language prompts.
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/fxckcode/mcp-cor'
If you have feedback or need assistance with the MCP directory API, please join our Discord server