Projonatics MCP Server
Exposes the Projonatics API to Claude Code (or any MCP client) as read-only tools: projects, tasks, milestones, payment milestones, financial summaries, dashboard and alerts.
It talks to a running Projonatics backend over HTTPS using a personal API token, so it sees exactly what that user sees (role-based scoping applies).
1. Get an API token
In the app: open your profile menu (top right) → Claude Code (MCP) → Generate token. The key is shown once.
Or mint one on the server:
# production (docker)
docker compose -f docker-compose.prod.yml exec backend python manage.py drf_create_token you@company.com
# local
cd backend && python manage.py drf_create_token you@company.com
GET /api/me/api-token/ reports whether a token exists; DELETE revokes it; POST again rotates it.
2. Register with Claude Code
Published on PyPI as projonatics-mcp; uvx installs it on first run:
claude mcp add -s user projonatics \
-e PROJONATICS_URL=https://<your-domain> \
-e PROJONATICS_TOKEN=<token> \
-- uvx projonatics-mcp
From a local clone (development): -- uv run --directory /absolute/path/to/projonatics/mcp projonatics-mcp.
To pick up a newer release: uv cache clean projonatics-mcp and restart Claude Code.
Check with claude mcp get projonatics. Re-run claude mcp remove projonatics -s user then add to change the URL or token.
Tools
| Tool | What it returns |
|---|---|
whoami |
User the token belongs to (id, email, role) |
list_clients |
All clients |
list_projects(client_id?) |
Projects visible to the user |
get_project(project_id) |
Full project detail |
list_milestones(project_id?) |
Work milestones |
list_tasks(project_id?, status?, assignee_id?, assigned_to_me?, ordering?) |
Tasks with filters |
get_task(task_id) |
One task |
get_project_financials(project_id) |
Revenue vs cost summary, payment milestones, cost breakdown |
list_payment_milestones(project_id?) |
Invoicing schedule |
get_dashboard |
Metrics, pulse, today's focus, pending payments |
get_alerts |
Overdue tasks, upcoming milestones, overdue payments, budget warnings, ready-to-invoice |
list_team_members |
Team roster |
estimate_cost(project_id, num_engineers, num_days) |
Cost estimate (admin) |
Admin-only endpoints (costs, margins, pending payments, estimates) return a 403 for non-admin tokens; the error message says so.
Development
cd mcp
uv sync
uv run pytest
Tests mock the HTTP transport; no backend needed.
Releasing
Bump version in pyproject.toml, commit, then tag and push:
git tag mcp-v0.1.1 && git push origin mcp-v0.1.1
.github/workflows/publish-mcp.yml runs the tests, builds, and publishes to PyPI via trusted publishing.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file projonatics_mcp-0.1.0.tar.gz.
File metadata
- Download URL: projonatics_mcp-0.1.0.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4410fbbe667107a0edf06efe569bc2bcda15b5b2b1913087031e9975a72b338
|
|
| MD5 |
3c9f9b70cae65af6af452a08faceab90
|
|
| BLAKE2b-256 |
749fe8052ba39e06a1f81122dcdb2b28c77c3fd88ac10bffef504c86510436f0
|
Provenance
The following attestation bundles were made for projonatics_mcp-0.1.0.tar.gz:
Publisher:
publish-mcp.yml on Artiselite/projonatics
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
projonatics_mcp-0.1.0.tar.gz -
Subject digest:
b4410fbbe667107a0edf06efe569bc2bcda15b5b2b1913087031e9975a72b338 - Sigstore transparency entry: 2603032123
- Sigstore integration time:
-
Permalink:
Artiselite/projonatics@13aca15da12f01cfddac6f54e89101e284a4f0f4 -
Branch / Tag:
refs/tags/mcp-v0.1.0 - Owner: https://github.com/Artiselite
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-mcp.yml@13aca15da12f01cfddac6f54e89101e284a4f0f4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file projonatics_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: projonatics_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 6.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79c9d5bae466f463e11c58dccf67a90ed9d7ec1a94e84ef0c941f10a82379676
|
|
| MD5 |
70381fd9eb1fc9df8ffc5946d11ad5e1
|
|
| BLAKE2b-256 |
c335f3cb8c034854062cc0f22534b5b2cf507ceb8993d395c26fdc7e46bf9243
|
Provenance
The following attestation bundles were made for projonatics_mcp-0.1.0-py3-none-any.whl:
Publisher:
publish-mcp.yml on Artiselite/projonatics
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
projonatics_mcp-0.1.0-py3-none-any.whl -
Subject digest:
79c9d5bae466f463e11c58dccf67a90ed9d7ec1a94e84ef0c941f10a82379676 - Sigstore transparency entry: 2603032415
- Sigstore integration time:
-
Permalink:
Artiselite/projonatics@13aca15da12f01cfddac6f54e89101e284a4f0f4 -
Branch / Tag:
refs/tags/mcp-v0.1.0 - Owner: https://github.com/Artiselite
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-mcp.yml@13aca15da12f01cfddac6f54e89101e284a4f0f4 -
Trigger Event:
push
-
Statement type: