accelo-mcp
An unofficial Model Context Protocol server for the Accelo CRM platform. It exposes Accelo data and operations to MCP-compatible AI assistants through the documented Accelo REST API.
This project is not affiliated with or endorsed by Accelo. Users are responsible for their Accelo account, OAuth application, permissions, and data handling.
Installation
With uvx
The recommended installation for MCP hosts is:
{
"mcpServers": {
"accelo": {
"command": "uvx",
"args": ["accelo-mcp"],
"env": {
"ACCELO_DEPLOYMENT": "your-deployment",
"ACCELO_CLIENT_ID": "your-client-id",
"ACCELO_CLIENT_SECRET": "your-client-secret"
}
}
}
}
To pin a release:
"args": ["accelo-mcp==0.1.0"]
uvx installs the package into an isolated environment and runs the accelo-mcp command.
With pip
python3 -m pip install accelo-mcp
accelo-mcp
From source
git clone <repository-url>
cd accelo-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
Configuration
Copy .env.example to .env, or provide these variables through the MCP host:
| Variable | Required | Default | Description |
|---|---|---|---|
ACCELO_DEPLOYMENT |
Yes | — | Deployment prefix, such as example for example.accelo.com |
ACCELO_CLIENT_ID |
Yes | — | OAuth2 client ID from an Accelo application |
ACCELO_CLIENT_SECRET |
Depends on auth type | — | OAuth2 client secret; not required for public PKCE applications |
ACCELO_AUTH_TYPE |
No | web |
web, service, installed, or public |
ACCELO_SCOPE |
No | read(all) |
OAuth2 scope; defaults to read-only. Add write access explicitly, e.g. read(all),write(all), only if you need the write tools |
ACCELO_REDIRECT_URI |
For web and public |
http://localhost:9876/callback (web only) |
Local OAuth callback URL. Optional for web (defaults as shown); required for public with no default. Must exactly match the redirect URI registered on the Accelo application. |
ACCELO_MCP_PORT |
No | 3000 |
Port used by the SSE transport |
Create or obtain an OAuth application for the Accelo deployment you intend to access. Never commit client secrets, refresh tokens, access tokens, cookies, or webhook secrets.
Authentication types
All four authentication types use OAuth 2.0. They differ in whether a person authorises interactively in a browser and whether a client secret is required.
| Auth type | OAuth 2.0 grant | Interactive browser login | Client secret | Typical use |
|---|---|---|---|---|
web |
Authorisation Code + refresh token | Yes, once | Required | Individual users; the recommended default |
public |
Authorisation Code with PKCE + refresh token | Yes, once | Not required | Publicly distributed clients that cannot keep a secret |
installed |
Authorisation Code via PIN + refresh token | Yes (approve, then enter a PIN) | Required | Installed clients using Accelo's PIN approval |
service |
Client Credentials | No | Required | Server-to-server automation under a shared service identity |
Key points:
publicstill requires OAuth. "Public" means no client secret is distributed, not that authentication is skipped. On first run the server opens your browser, you log in to Accelo and authorise, Accelo redirects back to a local127.0.0.1callback listener, and the server exchanges the authorisation code (using a PKCEcode_verifier) for tokens. No client secret is ever sent.serviceis the only non-interactive flow. It authenticates as a service identity via the Client Credentials grant and never opens a browser. Every other type requires a one-time interactive authorisation.- After the first authorisation,
web,public, andinstalledcache a refresh token and reauthorise silently, so the browser step is not repeated on later runs. - The redirect URI must line up in three places for
webandpublic: theACCELO_REDIRECT_URIyou set, the port the local callback listener binds (derived from that URI, or8080if the URI has no explicit port), and the redirect URI registered on the Accelo application. Accelo rejects the authorisation request if its registered value does not match. Forpublic,ACCELO_REDIRECT_URIis mandatory and has no default.
Tokens are cached locally at ~/.accelo-mcp/tokens.json with restrictive file permissions. The local callback listener binds to 127.0.0.1 only.
Usage
The default transport is stdio, which is suitable for Claude Desktop, Kiro, and other local MCP hosts:
accelo-mcp
The server also supports SSE transport:
accelo-mcp --sse
The server provides 219 tools covering companies, contacts, affiliations, activities, projects, tickets, tasks, retainers, sales, billing, time tracking, custom fields, resources, workflow progressions, and related Accelo objects.
For complex queries, call accelo_get_context first. It describes the Accelo object model, relationships, filtering conventions, pagination, and field selection syntax.
Filtering and field selection
All list tools accept structured filters:
{"standing": "active"}
{"date_created_after": 1690000000}
{"status": [1, 2, 3]}
{"order_by_desc": "date_modified"}
Request linked or optional fields with fields:
website,phone
postal_address(city,state)
_ALL
Development
make install # install the package and development dependencies
make test # run tests
make lint # run Ruff checks
make audit # audit Python dependencies for known vulnerabilities
make check # run lint, tests, and dependency audit
make build # build a wheel and source distribution
Security
Please report suspected vulnerabilities privately. See SECURITY.md for the reporting process. Do not include credentials, customer data, or access tokens in an issue.
License
MIT. See LICENSE.
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 accelo_mcp-0.1.0.tar.gz.
File metadata
- Download URL: accelo_mcp-0.1.0.tar.gz
- Upload date:
- Size: 64.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94d828cc7ae5ae45aab7ab220a4a648fe522864e32eb5418b25f42d8e2da818f
|
|
| MD5 |
91e487307580b1823764d6a2df165d9e
|
|
| BLAKE2b-256 |
de18b8e98e166478e541def68381b42d422d55bbe1d4ecd2057d6a7dbc230158
|
Provenance
The following attestation bundles were made for accelo_mcp-0.1.0.tar.gz:
Publisher:
publish.yml on Selerity/accelo-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
accelo_mcp-0.1.0.tar.gz -
Subject digest:
94d828cc7ae5ae45aab7ab220a4a648fe522864e32eb5418b25f42d8e2da818f - Sigstore transparency entry: 2804486489
- Sigstore integration time:
-
Permalink:
Selerity/accelo-mcp@48e240f23962aeeca8b132fa87250ff8d6d7edda -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Selerity
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@48e240f23962aeeca8b132fa87250ff8d6d7edda -
Trigger Event:
push
-
Statement type:
File details
Details for the file accelo_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: accelo_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 82.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 |
781f8f6bbc40a33512eb4f8a83177d54c25051eb105e885ac61ab0f5fccda774
|
|
| MD5 |
0c86195debd5df1aa8c9b95892f80772
|
|
| BLAKE2b-256 |
402e09c6e214b093a6767d2ae252bf2b974ea16c7d9950a009bd385ea66f918a
|
Provenance
The following attestation bundles were made for accelo_mcp-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on Selerity/accelo-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
accelo_mcp-0.1.0-py3-none-any.whl -
Subject digest:
781f8f6bbc40a33512eb4f8a83177d54c25051eb105e885ac61ab0f5fccda774 - Sigstore transparency entry: 2804486544
- Sigstore integration time:
-
Permalink:
Selerity/accelo-mcp@48e240f23962aeeca8b132fa87250ff8d6d7edda -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Selerity
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@48e240f23962aeeca8b132fa87250ff8d6d7edda -
Trigger Event:
push
-
Statement type: