boostu-teamleader-mcp

boostu-teamleader-mcp

Open-source MCP server for Teamleader Focus CRM. Use Teamleader inside Claude and other AI assistants: contacts, deals, quotations, invoices, projects and more.

Category
Visit Server

README

๐Ÿ”— BoostU Teamleader MCP

The open-source Teamleader Focus MCP server. Manage your CRM from Claude and other AI assistants, in plain language. ๐Ÿค–

CI npm version npm downloads node Model Context Protocol tools License: MIT Made by BoostU


๐Ÿ’ก What is this?

boostu-teamleader-mcp is a Model Context Protocol server that exposes the Teamleader Focus API to AI assistants โ€” including Claude Desktop, Claude Code, Cursor, and Windsurf. It provides over 100 tools spanning the full Teamleader Focus surface: CRM (contacts, companies, deals), sales documents (quotations, invoices, credit notes), product catalog, subscriptions, projects, time tracking, customer-service tickets, and more. Point your AI at it and manage your entire CRM through natural language.

Prefer not to self-host?

Use the managed, always-on edition at teamleader-mcp.boostu.be โ€” no OAuth setup, magic-link login, and a one-click connector for Claude. Free during the preview, paid plans after.

This repository is the open-source MCP server itself: run it locally with your own Teamleader integration. The hosted edition adds multi-tenant authentication, a dashboard, usage insights, and managed token handling on top of the same server.

Self-host (this repo) Managed (boostu.be)
Price Free, MIT-licensed Free preview, then paid
Setup Create your own Teamleader integration, run via npx Copy one connector URL into Claude
Tokens You manage .env and the refresh token Encrypted and rotated for you
Best for Developers and self-hosters Non-technical teams

๐Ÿ”Œ How it works

flowchart LR
    U["๐Ÿง‘ You"] -->|"plain language"| C["๐Ÿค– Claude / AI assistant"]
    C <-->|"MCP ยท stdio"| S["๐Ÿ”— boostu-teamleader-mcp"]
    S <-->|"OAuth2 REST"| T["๐Ÿ“‡ Teamleader Focus API"]

You ask Claude in plain language. Claude calls this MCP server, which authenticates to Teamleader Focus over OAuth2 and runs the matching API call. Your data stays in Teamleader; this server only brokers the calls.

Use the outline button at the top-right of this file to jump to any section.


โœจ Highlights

  • ๐Ÿ‘ฅ Full CRM: create and update contacts, companies, and deals across all pipelines
  • ๐Ÿงพ Quotations and invoicing: create quotations on deals, book invoices into accounting, send by email, and register payments
  • ๐Ÿ“ฆ Product catalog: browse products, categories, price lists, and units of measure
  • ๐Ÿ” Subscriptions: create, update, and deactivate recurring subscriptions
  • ๐Ÿ“Š Projects and time tracking: manage projects, milestones, log time entries, and start/stop live timers
  • ๐ŸŽซ Customer-service tickets: open tickets, post replies, and update statuses
  • ๐Ÿ”Ž Reference-data lookups: resolve deal phases, pipelines, tax rates, payment terms, lost reasons, and more
  • ๐Ÿ” OAuth2 with automatic refresh-token rotation: tokens are refreshed transparently; rotated tokens are persisted to a configurable file
  • ๐Ÿงฉ Selectable tool groups: load only the groups you need via TEAMLEADER_TOOLS to keep your assistant's context lean

๐Ÿš€ Quick Start

Run without installing

npx boostu-teamleader-mcp

Global install

npm i -g boostu-teamleader-mcp
boostu-teamleader-mcp

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "teamleader": {
      "command": "npx",
      "args": ["-y", "boostu-teamleader-mcp"],
      "env": {
        "TEAMLEADER_CLIENT_ID": "your-client-id",
        "TEAMLEADER_CLIENT_SECRET": "your-client-secret",
        "TEAMLEADER_REFRESH_TOKEN": "your-refresh-token"
      }
    }
  }
}

Claude Code

Add to your project's .mcp.json or ~/.claude/mcp.json:

{
  "mcpServers": {
    "teamleader": {
      "command": "npx",
      "args": ["-y", "boostu-teamleader-mcp"],
      "env": {
        "TEAMLEADER_CLIENT_ID": "your-client-id",
        "TEAMLEADER_CLIENT_SECRET": "your-client-secret",
        "TEAMLEADER_REFRESH_TOKEN": "your-refresh-token"
      }
    }
  }
}

Cursor

Add to .cursor/mcp.json in your project root (or the global ~/.cursor/mcp.json):

{
  "mcpServers": {
    "teamleader": {
      "command": "npx",
      "args": ["-y", "boostu-teamleader-mcp"],
      "env": {
        "TEAMLEADER_CLIENT_ID": "your-client-id",
        "TEAMLEADER_CLIENT_SECRET": "your-client-secret",
        "TEAMLEADER_REFRESH_TOKEN": "your-refresh-token"
      }
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "teamleader": {
      "command": "npx",
      "args": ["-y", "boostu-teamleader-mcp"],
      "env": {
        "TEAMLEADER_CLIENT_ID": "your-client-id",
        "TEAMLEADER_CLIENT_SECRET": "your-client-secret",
        "TEAMLEADER_REFRESH_TOKEN": "your-refresh-token"
      }
    }
  }
}

๐Ÿ” Authentication

You need three env vars: TEAMLEADER_CLIENT_ID, TEAMLEADER_CLIENT_SECRET, and TEAMLEADER_REFRESH_TOKEN. Obtain them by registering an integration in the Teamleader Marketplace / Developer portal and completing the OAuth2 authorization flow.

Teamleader rotates the refresh token on every API call. Set TEAMLEADER_TOKEN_STORE to a writable file path so the server can persist the latest token between restarts โ€” without it the token in your config will go stale after the first restart.

For the full step-by-step walkthrough (authorize URL, code exchange, helper scripts) see docs/AUTHENTICATION.md.


โš™๏ธ Configuration

Environment variables

Name Required Description
TEAMLEADER_CLIENT_ID Yes OAuth2 client ID from your Teamleader integration
TEAMLEADER_CLIENT_SECRET Yes OAuth2 client secret from your Teamleader integration
TEAMLEADER_REFRESH_TOKEN Yes Initial refresh token obtained from the OAuth2 authorization flow
TEAMLEADER_TOKEN_STORE No Path to a writable file where the server persists the rotated refresh token (e.g. /var/run/teamleader-token). Strongly recommended in production.
TEAMLEADER_TOOLS No Comma-separated list of tool group keys to enable. When unset, all 21 groups are loaded.

Selective tool groups

Use TEAMLEADER_TOOLS to limit which tool groups are registered. This is useful when you want to keep the assistant's tool list small or restrict access to certain areas of Teamleader.

TEAMLEADER_TOOLS=deals,quotations,products

Full list of group keys:

Key What it covers
contacts Contacts CRUD
companies Companies CRUD
deals Deals / opportunities
tasks Tasks
events Calendar events
invoices Invoices (create, book, send, pay, download)
quotations Quotations (create, update, send, accept)
products Product catalog and price lists
reference Deal phases, tax rates, payment terms, etc.
org Users, teams, departments
customFields Custom field definitions
creditNotes Credit notes
subscriptions Recurring subscriptions
projects Projects and milestones
timeTracking Time log entries and live timers
activities Calls and meetings
tickets Support tickets
tags Add/remove tags on contacts and companies
notes Notes on any subject
files File list, download, upload
webhooks Webhook registration

๐Ÿงฐ Available Tools

Contacts

Tool Description
teamleader_list_contacts List contacts from Teamleader Focus with optional filtering and pagination
teamleader_get_contact Get detailed information about a specific contact
teamleader_create_contact Create a new contact in Teamleader Focus
teamleader_update_contact Update an existing contact in Teamleader Focus

Companies

Tool Description
teamleader_list_companies List companies from Teamleader Focus with optional filtering and pagination
teamleader_get_company Get detailed information about a specific company
teamleader_create_company Create a new company in Teamleader Focus

Deals

Tool Description
teamleader_list_deals List deals/opportunities from Teamleader Focus with optional filtering and pagination
teamleader_get_deal Get detailed information about a specific deal
teamleader_create_deal Create a new deal/opportunity in Teamleader Focus
teamleader_update_deal Update an existing deal in Teamleader Focus

Tasks

Tool Description
teamleader_list_tasks List tasks from Teamleader Focus with optional filtering and pagination
teamleader_create_task Create a new task in Teamleader Focus

Events

Tool Description
teamleader_list_events List calendar events from Teamleader Focus with optional filtering and pagination
teamleader_get_event Get detailed information about a specific event
teamleader_create_event Create a new calendar event in Teamleader Focus

Invoices

Tool Description
teamleader_list_invoices List invoices from Teamleader Focus with optional filtering and pagination
teamleader_get_invoice Get detailed information about a specific invoice
teamleader_create_invoice Create a new draft invoice in Teamleader Focus
teamleader_invoices_book Book a draft invoice into accounting and assign it a number
teamleader_invoices_send Send an invoice by email to the specified recipients
teamleader_invoices_register_payment Register a payment against an invoice
teamleader_invoices_download Get a temporary download URL for an invoice in the specified format

Quotations

Tool Description
teamleader_quotations_list List quotations, optionally filtered by deal id
teamleader_quotations_info Get a single quotation by id
teamleader_quotations_create Create a quotation on a deal, providing one or more line items
teamleader_quotations_update Update a quotation's line items
teamleader_quotations_accept Accept a quotation (marks it accepted โ€” hard to undo)
teamleader_quotations_send Send a quotation by email to the customer

Products

Tool Description
teamleader_products_list List products, optionally filtered by search term
teamleader_products_info Get a single product by id
teamleader_product_categories_list List product categories
teamleader_price_lists_list List price lists
teamleader_units_of_measure_list List units of measure

Reference Data

Tool Description
teamleader_deal_phases_list List deal phases
teamleader_deal_pipelines_list List deal pipelines
teamleader_deal_sources_list List deal sources
teamleader_lost_reasons_list List lost reasons for deals
teamleader_tax_rates_list List tax rates
teamleader_payment_terms_list List payment terms
teamleader_withholding_tax_rates_list List withholding tax rates

Organisation

Tool Description
teamleader_users_list List users, optionally filtered by search term
teamleader_users_info Get a single user by id
teamleader_users_me Get the currently authenticated user
teamleader_teams_list List teams
teamleader_departments_list List departments

Custom Fields

Tool Description
teamleader_custom_field_definitions_list List custom field definitions
teamleader_custom_field_definitions_info Get a single custom field definition by id

Credit Notes

Tool Description
teamleader_credit_notes_list List credit notes, optionally filtered by invoice or department
teamleader_credit_notes_info Get a single credit note by id

Subscriptions

Tool Description
teamleader_subscriptions_list List subscriptions, optionally filtered by customer
teamleader_subscriptions_info Get a single subscription by id
teamleader_subscriptions_create Create a new subscription (starts recurring invoicing for the customer)
teamleader_subscriptions_update Update a subscription's title
teamleader_subscriptions_deactivate Deactivate a subscription (stops future invoicing)

Projects

Tool Description
teamleader_projects_list List projects, optionally filtered by search term or customer
teamleader_projects_info Get a single project by id
teamleader_projects_create Create a new project for a customer
teamleader_milestones_list List milestones, optionally filtered by project
teamleader_milestones_create Create a milestone on a project

Time Tracking

Tool Description
teamleader_time_tracking_list List time tracking entries, optionally filtered by user
teamleader_time_tracking_add Add a time tracking entry
teamleader_time_tracking_update Update a time tracking entry's duration or description
teamleader_timer_start Start a running timer
teamleader_timer_stop Stop a running timer and create a time tracking entry

Activities (Calls & Meetings)

Tool Description
teamleader_calls_list List calls, optionally filtered by customer
teamleader_calls_create Create a call activity
teamleader_calls_complete Mark a call as completed
teamleader_meetings_list List meetings
teamleader_meetings_create Schedule a meeting
teamleader_meetings_complete Mark a meeting as completed

Tickets

Tool Description
teamleader_tickets_list List support tickets, optionally filtered by customer or status
teamleader_tickets_info Get a single support ticket by id
teamleader_tickets_create Create a new support ticket for a customer
teamleader_tickets_update Update a ticket's subject or status
teamleader_tickets_add_message Add a reply/message to a ticket thread
teamleader_ticket_status_list List all available ticket statuses

Tags

Tool Description
teamleader_contacts_add_tags Add one or more tags to a contact
teamleader_contacts_remove_tags Remove one or more tags from a contact
teamleader_companies_add_tags Add one or more tags to a company
teamleader_companies_remove_tags Remove one or more tags from a company

Notes

Tool Description
teamleader_notes_list List notes linked to a subject (contact, company, deal, etc.)
teamleader_notes_create Create a note linked to a subject

Files

Tool Description
teamleader_files_list List files linked to a subject (contact, company, deal, etc.)
teamleader_files_download Get a temporary download URL for a file by its ID
teamleader_files_upload Initiate a two-step file upload and return the upload URL

Webhooks

Tool Description
teamleader_webhooks_list List registered webhooks
teamleader_webhooks_register Register a webhook URL for the given event types
teamleader_webhooks_unregister Unregister a webhook URL for the given event types

๐Ÿ’ฌ Example Prompts

Create a quotation for deal <id> with two line items: 5 hours of consulting at โ‚ฌ150/h and a one-time setup fee of โ‚ฌ500.
Book the draft invoice <id> into accounting and then send it to the customer.
Register a โ‚ฌ1 200 payment against invoice <id> received today via bank transfer.
Log 2.5 hours on project <id> for user <user_id> with the note "API integration work".
Start a timer for me right now โ€” I'm working on the BoostU onboarding project.
Open a support ticket for company <id>: subject "Login not working", priority high.
What deal phase IDs do we have in pipeline <id>? I need to move deal <id> to the "Proposal sent" phase.
List all products in the "Hosting" category and their prices.
Create a monthly subscription for company <id>: product <product_id>, quantity 1, starting next month.
Show me all open deals with their current phases and tell me which ones haven't moved in the last 30 days.

๐Ÿณ Docker

docker run --rm \
  -e TEAMLEADER_CLIENT_ID=your-client-id \
  -e TEAMLEADER_CLIENT_SECRET=your-client-secret \
  -e TEAMLEADER_REFRESH_TOKEN=your-refresh-token \
  -e TEAMLEADER_TOKEN_STORE=/data/teamleader-token \
  -v /var/run/teamleader:/data \
  ghcr.io/boostuagency/boostu-teamleader-mcp

๐Ÿ› ๏ธ Development

# Clone and install
git clone https://github.com/boostuagency/boostu-teamleader-mcp.git
cd boostu-teamleader-mcp
npm install

# Run in development mode (no build step required)
npm run dev

# Build
npm run build

# Run tests
npm test

# Type-check only
npm run typecheck

๐Ÿ—๏ธ Architecture

The core of the server is createServer in src/server.ts, which is transport-agnostic โ€” it takes a TeamleaderClient and registers the enabled tool groups, returning a plain McpServer instance that the entry point (src/index.ts) wires to a StdioServerTransport. Tool logic lives in per-domain modules under src/tools/, each following a consistent try / respond / catch / respondError pattern using shared helpers in src/lib/. OAuth2 token acquisition and rotation are handled entirely in src/api/auth.ts, transparent to the rest of the codebase. A hosted, multi-tenant edition of this server is available at teamleader-mcp.boostu.be.


โœ… Endpoint Verification

Most read endpoints (*.list, *.info) have been live-verified against the Teamleader Focus API. Several write and action endpoints (e.g. subscriptions.create, projects.create, files.upload) are implemented from the official documentation but have not been tested against a live account with the relevant module active. If an endpoint name is wrong, the call will fail with a clear HTTP error message rather than silently misbehaving. The full endpoint manifest and verification status are documented in docs/teamleader-endpoints.md.


๐Ÿค Contributing

See CONTRIBUTING.md for development setup, commit conventions, and instructions on adding new tool groups.


๐Ÿ”’ Security

Report security vulnerabilities to nick@boostu.be โ€” do not open a public issue. See SECURITY.md for the disclosure policy. Never commit .env files or .teamleader-token to version control; both are listed in .gitignore.


โš–๏ธ Disclaimer

This is an independent, community-built integration. It is not affiliated with, endorsed by, or sponsored by Teamleader NV. "Teamleader" and "Teamleader Focus" are trademarks of Teamleader NV and are used here only to describe compatibility. You are responsible for your own use of the Teamleader API under Teamleader's terms.


๐Ÿ“„ License

MIT License โ€” Copyright (c) 2026 BoostU Agency. See NOTICE for upstream attribution.

Recommended Servers

playwright-mcp

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured