Skip to main content
Glama
Mad-Man-Dan

Karbon MCP Server

by Mad-Man-Dan

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PORTNoHTTP mode only: port to listen on (default 8787; --port wins)8787
KARBON_READ_ONLYNoSet to 'true' to disable all create/update toolsfalse
KARBON_ACCESS_KEYYesAccess key (JWT) from Karbon Connected Apps (required)
KARBON_HTTP_SECRETNoHTTP mode only: secret path segment for the endpoint (/mcp/<secret>)
KARBON_API_BASE_URLNoOverride the API base URLhttps://api.karbonhq.com/v3
KARBON_BEARER_TOKENYesBearer token from Karbon Connected Apps (required)

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_contactsA

List or search person contacts in Karbon. Supports OData filtering, e.g. filter: "contains(FullName,'Smith')" or "ContactType eq 'Client'".

get_contactA

Get a single person contact by ContactKey — or by your own UserDefinedIdentifier — optionally expanding related data (BusinessCards, AccountingDetail, ClientTeam). Provide exactly one of contactKey or userDefinedIdentifier.

create_contactC

Create a new person contact in Karbon.

update_contactA

Update fields on an existing person contact (partial update via PATCH). Only include the fields you want to change.

list_organizationsA

List or search organization contacts in Karbon. Supports OData filtering, e.g. filter: "contains(FullName,'Acme')".

get_organizationA

Get a single organization by OrganizationKey — or by your own UserDefinedIdentifier — optionally expanding related data (BusinessCards, AccountingDetail, ClientTeam, Contacts). Provide exactly one of organizationKey or userDefinedIdentifier.

create_organizationB

Create a new organization contact in Karbon.

update_organizationB

Update fields on an existing organization (partial update via PATCH). Only include the fields you want to change.

list_client_groupsA

List or search client groups in Karbon. Supports OData filtering, e.g. filter: "contains(FullName,'Smith Family')" or "UserDefinedIdentifier eq 'ABC123'".

get_client_groupA

Get a single client group by ClientGroupKey — or by your own UserDefinedIdentifier — optionally expanding related data (BusinessCard, ClientTeam). Includes the group's members (contacts and organizations). Provide exactly one of clientGroupKey or userDefinedIdentifier.

create_client_groupB

Create a new client group in Karbon. Members are existing contacts and/or organizations.

update_client_groupA

Update fields on an existing client group (partial update via PATCH). Only include the fields you want to change.

list_work_itemsA

List or search work items (jobs/engagements) in Karbon. Useful filters: "PrimaryStatus eq 'InProgress'", "AssigneeEmailAddress eq 'user@firm.com'", "DueDate lt 2026-08-01". PrimaryStatus values: Planned, ReadyToStart, InProgress, Waiting, Completed.

get_work_itemB

Get a single work item by WorkItemKey.

get_estimate_summaryA

Get the estimate summary for a work item (read-only): budgeted vs. actual time and value. Useful for 'are we over budget on this job' questions — pair with list_time_entries for detail.

create_work_itemA

Create a new work item in Karbon. WorkType and status values are tenant-specific — call get_tenant_settings first if unsure.

update_work_itemA

Update fields on an existing work item (partial update via PATCH). Only include the fields you want to change.

get_noteB

Get a single note by its NoteID.

get_commentA

Get a single comment by its CommentKey. Comments appear on work item and client timelines alongside notes.

create_noteA

Create a note in Karbon, optionally linked to work items, contacts, organizations, or client groups via timelines. Notes linked to a work item also appear on the client's timeline.

list_timesheetsA

List timesheets (read-only). Useful filters: "StartDate ge 2026-07-01", "UserKey eq '...'".

get_timesheetA

Get a single timesheet by TimesheetKey, optionally expanding TimeEntries.

list_time_entriesA

List individual time entries (read-only). Useful for reporting on time logged against clients or work items.

get_time_entryA

Get a single individual time entry by its IndividualTimeEntryKey (read-only).

list_invoicesA

List invoices in Karbon (read-only). Supports OData filtering, e.g. filter: "InvoiceStatus eq 'AwaitingPayment'" or "TotalAmountDue gt 0". Statuses: Approved, AwaitingPayment, Paid, Exported, Voided.

get_invoiceA

Get a single invoice by InvoiceKey (read-only), optionally expanding related data (LineItems, Payments, Data).

list_paymentsA

List payments recorded against invoices in Karbon (read-only). Supports pagination only — the Payments endpoint does not accept OData filters.

get_paymentA

Get a single payment by PaymentKey (read-only).

list_teamsA

List teams in Karbon (read-only). Supports OData filtering, e.g. filter: "contains(Name,'Tax')".

get_teamA

Get a single team by TeamKey, including its members (users and sub-teams).

add_team_membersA

Add one or more users to a team by their UserKeys (find them with list_users). Users already on the team are skipped. Team membership can affect work visibility and assignment — confirm with the user before changing it.

remove_team_memberA

Remove a user from a team by their UserKey. Team membership can affect work visibility and assignment — confirm with the user before changing it.

list_entity_filesA

List the files attached to a work item, contact, or organization — name, size, mime type, created date, and a DownloadUrl usable with download_file. Download links expire 15 minutes after this call.

download_fileA

Download a Karbon file to a local path on the machine running this MCP server. Get the DownloadUrl from list_entity_files first — download links expire after 15 minutes, so re-list if the download fails with an auth error. Ask the user where to save before writing outside a temp directory, and never overwrite a file the user didn't ask you to replace.

upload_fileA

Upload a file to Karbon and attach it to a work item, contact, organization, or client group (at least one key is required). SIZE LIMITS: keep uploads small — Karbon rejects oversized uploads, and this server reads the whole file into memory. Prefer filePath (a path on the machine running this MCP server) whenever possible; only use contentBase64 for small files (roughly under 1 MB), because base64 inflates data ~33% and large payloads can exceed the AI client's message limits or be truncated mid-transfer. If a file seems large (tens of MB or more), tell the user to upload it through Karbon's own UI instead. SECURITY: only upload files the user explicitly pointed you to. Never upload configuration files, credential stores, environment files, keys, or anything the user has not named — uploading puts the file's contents in the Karbon tenant.

get_work_scheduleA

Get a recurring work schedule by WorkScheduleKey — the recurrence rules that automatically generate work items.

create_work_scheduleA

Create a recurring work schedule from an existing work item. The schedule will automatically generate new work items on the recurrence you set — confirm the recurrence details with the user before calling. Note: RecurrenceFrequency cannot be changed after creation.

update_work_scheduleA

Update a work schedule (partial via PATCH). The API only supports changing the end date and the assignee here. Note: changing AssigneeUserKey reassigns every not-yet-started work item the schedule has generated — confirm with the user first.

get_business_cardA

Get a single business card by BusinessCardKey. Business cards hold the contact details (email, phone, address, websites) of a contact, organization, or client group. Find the key by expanding BusinessCards on get_contact / get_organization / get_client_group.

update_business_cardA

Update a business card (full replace via PUT) — this is how you change a contact's, organization's, or client group's email addresses, phone numbers, and addresses. Fetch the card first with get_business_card and send back the complete card with your changes, since omitted fields are cleared.

list_custom_fieldsA

List all custom field definitions for the Karbon tenant — field names, types (Text, Number, Date, Boolean, Colleague, ListSingleSelect, ListMultipleSelect), list options, and which entities they apply to.

get_custom_field_valuesA

Get the custom field values set on a specific entity (contact, organization, or client group) by its entity key.

set_custom_field_valuesA

Set custom field values on an entity (contact, organization, or client group). Use list_custom_fields for the available definitions and get_custom_field_values to see what's currently set. Values are always passed as an array of strings, even for single values.

create_custom_fieldA

Create a new custom field definition for the whole Karbon tenant. This changes the firm's shared configuration, not just one record — state the field name, type, and visibility to the user and get their explicit confirmation before calling.

delete_custom_fieldA

DESTRUCTIVE AND IRREVERSIBLE: deleting a custom field definition permanently removes the field AND every value stored in it across all contacts, organizations, and client groups in the tenant. Never call this without first telling the user exactly which field will be deleted (by name, via list_custom_fields) and receiving their explicit confirmation for that specific field.

list_usersB

List Karbon users (team members) on this account.

get_userA

Get a single Karbon user by their UserId.

get_tenant_settingsA

Get this Karbon account's configuration: valid work statuses (secondary statuses), work types, and contact types. Call this before creating or updating work items or contacts with tenant-specific values.

list_work_templatesA

List work templates available on this account. Use a WorkTemplateKey with create_work_item to create templated work.

get_work_templateA

Get a single work template by WorkTemplateKey, including its task and section structure.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/Mad-Man-Dan/karbon-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server