Teamleader Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Teamleader Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<p align="center"> <img src="https://www.teamleader.eu/hs-fs/hubfs/Logos/logo-teamleader-focus.png" alt="Teamleader Focus" width="300"> </p>
<h1 align="center">Teamleader MCP Server</h1>
<p align="center"> <strong>Control Teamleader Focus with natural language through the Model Context Protocol</strong> </p>
<p align="center"> <a href="#features">Features</a> • <a href="#quick-start">Quick Start</a> • <a href="#installation">Installation</a> • <a href="#tools">Tools</a> • <a href="#examples">Examples</a> • <a href="#contributing">Contributing</a> </p>
<p align="center"> <a href="https://www.npmjs.com/package/teamleader-mcp"><img src="https://img.shields.io/npm/v/teamleader-mcp" alt="npm version"></a> <img src="https://img.shields.io/badge/tools-42-blue" alt="42 Tools"> <img src="https://img.shields.io/badge/license-MIT-green" alt="MIT License"> <img src="https://img.shields.io/badge/MCP-compatible-purple" alt="MCP Compatible"> <img src="https://img.shields.io/badge/node-%3E%3D18-brightgreen" alt="Node >= 18"> </p>
A Model Context Protocol (MCP) server that connects AI assistants like Claude to Teamleader Focus - the all-in-one CRM, invoicing, and project management platform.
Instead of clicking through menus, just ask:
"Find all open deals for Acme Corporation"
"Create an invoice for 20 hours of consulting at €125/hour"
"Schedule a meeting with Sarah from TechStart next Tuesday at 2pm"
"Log 3 hours to the website project with description: frontend development"<!-- TODO: Add screenshots before public launch -->
<p align="center"> <i>🖼️ Screenshots coming soon</i> </p>
<details> <summary>Screenshot placeholders</summary>
| Description | Image |
|---|---|
| Claude Desktop with deal lookup | screenshots/deal-lookup.png |
| Invoice creation conversation | screenshots/invoice-creation.png |
| Multi-step workflow example | screenshots/workflow.png |
| Claude Desktop config | screenshots/config.png |
</details>
npx teamleader-mcp authThis opens a browser for OAuth login. Your credentials are saved automatically.
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"teamleader": {
"command": "npx",
"args": ["-y", "teamleader-mcp"]
}
}
}Restart Claude Desktop and ask: "What Teamleader tools do you have access to?"
No installation needed - runs directly:
npx teamleader-mcp auth # One-time OAuth setup
npx teamleader-mcp # Start the MCP servernpm install -g teamleader-mcp
teamleader-mcp authgit clone https://github.com/Weichie-com/teamleader-mcp.git
cd teamleader-mcp
npm install
npm run buildclient_id and client_secrethttp://localhost:3000/callbackcontacts, companies, deals, invoices, products, timetracking, events, usersThe easiest way:
node scripts/generate-token.jsOr manually via OAuth authorization code flow - see OAUTH_CLAUDE_SETUP.md.
cp .env.example .envEdit .env:
TEAMLEADER_ACCESS_TOKEN=your_access_token
TEAMLEADER_CLIENT_ID=your_client_id
TEAMLEADER_CLIENT_SECRET=your_client_secret
TEAMLEADER_REFRESH_TOKEN=your_refresh_tokenThis server provides 42 tools across all major Teamleader Focus features:
| Tool | Description |
|---|---|
teamleader_companies_list | List/search companies |
teamleader_company_info | Get company details |
teamleader_company_create | Create a company |
teamleader_company_update | Update a company |
| Tool | Description |
|---|---|
teamleader_contacts_list | List/search contacts |
teamleader_contact_info | Get contact details |
| Tool | Description |
|---|---|
teamleader_deals_list | List deals with filters |
teamleader_deal_info | Get deal details |
teamleader_deal_create | Create a deal |
teamleader_deal_update | Update a deal |
teamleader_deal_move | Move to different phase |
teamleader_deal_win | Mark as won |
teamleader_deal_lose | Mark as lost |
| Tool | Description |
|---|---|
teamleader_invoices_list | List invoices |
teamleader_invoice_info | Get invoice details |
teamleader_invoice_draft | Create draft invoice |
teamleader_invoice_update | Update invoice |
teamleader_invoice_send | Send via email |
teamleader_invoice_book | Book/finalize |
teamleader_invoice_register_payment | Register payment |
teamleader_invoice_delete | Delete invoice |
| Tool | Description |
|---|---|
teamleader_quotations_list | List quotations |
teamleader_quotation_info | Get quotation details |
teamleader_quotation_create | Create quotation |
teamleader_quotation_update | Update quotation |
teamleader_quotation_send | Send via email |
teamleader_quotation_accept | Mark as accepted |
teamleader_quotation_delete | Delete quotation |
teamleader_quotation_download | Get PDF link |
| Tool | Description |
|---|---|
teamleader_products_list | List products |
teamleader_product_info | Get product details |
teamleader_product_create | Create product |
teamleader_product_update | Update product |
| Tool | Description |
|---|---|
teamleader_timetracking_list | List time entries |
teamleader_timetracking_info | Get entry details |
teamleader_timetracking_add | Add time entry |
teamleader_timetracking_update | Update entry |
teamleader_timetracking_delete | Delete entry |
| Tool | Description |
|---|---|
teamleader_events_list | List events |
teamleader_event_info | Get event details |
teamleader_event_create | Create event |
| Tool | Description |
|---|---|
teamleader_emails_list | List tracked emails |
teamleader_email_track | Log an email |
"Find all open deals worth more than €10,000"
→ teamleader_deals_list(status: ["open"])
→ Filters results by value"Create an invoice for Acme Corp: 20 hours consulting at €125/hour, 30 days payment term"
→ teamleader_companies_list(term: "Acme Corp")
→ teamleader_invoice_draft(customer_id: "...", grouped_lines: [...])"Schedule a meeting with John from DataFlow next Tuesday at 2pm"
→ teamleader_contacts_list(term: "John DataFlow")
→ teamleader_event_create(title: "Meeting", starts_at: "...", contact_ids: [...])# List open deals
mcporter call teamleader.teamleader_deals_list status='["open"]'
# Get company info
mcporter call teamleader.teamleader_company_info id="uuid-here"
# Create a time entry
mcporter call teamleader.teamleader_timetracking_add \
started_at="2026-01-31T09:00:00+01:00" \
ended_at="2026-01-31T12:00:00+01:00" \
description="Development work"| Variable | Required | Description |
|---|---|---|
TEAMLEADER_ACCESS_TOKEN | Yes | OAuth access token |
TEAMLEADER_CLIENT_ID | No* | OAuth client ID |
TEAMLEADER_CLIENT_SECRET | No* | OAuth client secret |
TEAMLEADER_REFRESH_TOKEN | No* | OAuth refresh token |
TEAMLEADER_TOKEN_STORAGE | No | Custom token storage path |
*Required for automatic token refresh (recommended)
Static Mode: Only ACCESS_TOKEN set. Token expires after 1 hour. Manual refresh needed.
Auto Refresh Mode (Recommended): All four OAuth variables set. Tokens refresh automatically 5 minutes before expiry.
<details> <summary><strong>Server hangs or times out</strong></summary>
Make sure your config includes the args array:
{
"command": "node",
"args": ["/path/to/teamleader-mcp/dist/index.js"] // ← Required!
}</details>
<details> <summary><strong>"Unknown tool" error</strong></summary>
Tool names are prefixed with teamleader_. Use teamleader_deal_info, not get-deal.
Run mcporter list teamleader to see all tools. </details>
<details> <summary><strong>401 Unauthorized</strong></summary>
Access tokens expire after 1 hour. Set up automatic refresh with all OAuth variables, or manually refresh your token. </details>
<details> <summary><strong>Rate limiting errors</strong></summary>
Teamleader allows 200 requests/minute. The server respects rate limit headers. Wait and retry, or reduce request frequency. </details>
# Build
npm run build
# Watch mode
npm run dev
# Test
npm test # Watch mode
npm run test:run # Single run
# Lint
npm run lintWe welcome contributions! Here's how to help:
git checkout -b feature/amazing-featurenpm testgit commit -m 'Add amazing feature'git push origin feature/amazing-featuresrc/tools/tests/See ROADMAP.md for details.
MIT License - see LICENSE file.
Built with ❤️ using the Model Context Protocol by Anthropic.
<p align="center"> <sub>Made by <a href="https://weichie.com">Weichie</a> • Star ⭐ if you find this useful!</sub> </p>
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.