Starko MCP server
Use your Starko workspace from Claude, Cursor, VS Code or any other MCP host. The server offers the same tools as the Starko chat, with the same approvals.
Connect
- A workspace owner enables MCP access under Settings → Connections.
- Add a custom connector with the endpoint
https://v2.starko.one/api/mcp. In Claude Code:claude mcp add --transport http starko https://v2.starko.one/api/mcp - Click Connect. Starko opens, you sign in with your own account and pick the workspace the connection may act in.
Authentication
OAuth 2.1 with PKCE. Hosts register through Client ID Metadata Documents or dynamic registration; there are no API keys. Discovery documents: https://v2.starko.one/.well-known/oauth-protected-resource and https://v2.starko.one/.well-known/oauth-authorization-server. A token is bound to one person and one workspace; the person's role is read on every call, so removing someone from the workspace ends their connections at once.
tools:read: Read your workspace: tickets, conversations, CRM records, articles and reports.tools:write: Act in your workspace as you: create and change records. Actions that need a person's approval still ask for it.
Approvals
Tools marked below as needing confirmation never run on the first call. The call returns approval_required with a plain summary and a one-time confirmation token; the host shows the summary and, once the person agrees, repeats the call with the same arguments and _confirm set to the token. Tokens are valid for ten minutes and work once.
Tools
What a connection may use depends on the person's role and the workspace's configuration.
Tickets and projects
listTeamMembersread- Lists the people in the workspace: member id, name, email and role.
listTicketStatusesread- Lists the workspace's ticket statuses: slug, display name, semantic group and whether it is the default.
listProjectsread- Lists the workspace's active projects with id, name, status, dates and ticket progress.
searchTicketsread- Searches tickets with optional filters (title, status, assignee member ids, project, deadline and creation ranges, archived). Returns up to 20 rows with id, title, status, priority, dates, assignee, project and url.
listMyTicketsread- Lists the tickets assigned to the connected person. openOnly (default true) leaves out closed ones.
listOpenTicketsForMeread- Lists open tickets assigned to the connected person plus the unassigned ones, sorted by priority and nearest deadline. Closed and archived tickets are left out.
listOverdueTicketsread- Lists tickets whose deadline has passed and that are not closed, most overdue first. assignedToMe limits it to the connected person.
getTicketDetailsread- Returns one ticket by id: fields, description and file attachments.
createTicketwrite- Creates a ticket. title is required; description, priority, status slug, project, assignee member id, start date and deadline are optional. Returns the ticket with its url.
updateTicketwrite- Updates one ticket's title, description, status, priority, dates, assignee, project or reminder. Status moves into a closing status, reassignments away from someone else and bulk changes are refused by this tool.
addTicketCommentwrite- Adds an internal comment (markdown) to a ticket. Can mention workspace members by member id, mention Starko AI to hand the ticket to the coding agent with the comment as its instruction, or post under the Starko AI name.
setTicketParentwrite- Makes a ticket a sub-ticket of another, or detaches it with parentTicketId "none".
addTicketWatcherswrite- Adds workspace members (by member id) as watchers of a ticket; existing watchers are kept.
listTicketRelationsread- Returns what a ticket is blocked by, blocks, duplicates or relates to, plus its parent and sub-tickets.
listProjectTemplatesread- Lists the project templates available: built-in starters, the workspace's own saved templates and public ones. Each has an icon, a summary, a brief and a default ticket list.
createProjectwrite- Creates a project, optionally from a template and with an initial list of tickets. Returns the project id, url and how many tickets were created.
linkTicketswrite- Creates a relation between two tickets: blocked_by, blocks, duplicate or relates_to. Repeating the same link is safe.
Reporting
getReportingAnalyticsread- Returns workspace reporting for a 7, 28 or 90 day window: open queue, response and resolution times, conversation volume, ticket metrics, client funnel, knowledge gaps, document usage and question types, summarised with the last 7 daily points per series.
Ticket workflows
listWorkflowCapabilitiesread- Returns the catalog for building Ticket Workflows: node kinds with configuration hints, trigger event types, AI-step tool names and the authoring rules.
listTicketWorkflowsread- Lists the workspace's Ticket Workflows: id, name, active flag, trigger kind and last run.
getTicketWorkflowread- Returns a Ticket Workflow by id (name, trigger, active flag, graph) in the authoring shape.
applyTicketWorkflowwriteneeds confirmation- Replaces a Ticket Workflow's graph, and optionally its name, with an authoring graph. The graph is compiled and validated; errors are returned instead of saved. Needs the person's confirmation before it runs.
createTicketWorkflowwriteneeds confirmation- Creates a Ticket Workflow from an authoring graph and switches it on when it passes validation. Returns the workflow id and url. Needs the person's confirmation before it runs.
runTicketWorkflowwriteneeds confirmation- Runs a Ticket Workflow now and reports status, error, output and each executed step, waiting up to 20 seconds. Event-triggered workflows take a targetId (a ticket, client, company, tenant or deal); manual, webhook and scheduled ones take an input object. Needs the person's confirmation before it runs.
getTicketWorkflowRunread- Returns one workflow run by id: status, error, output and executed steps, optionally waiting up to 30 seconds for it to finish.
Pantheon ERP (only in workspaces that configured it)
pantheonFindCustomerread- Looks a customer up in the Pantheon ERP by PIB and returns the matches with their Pantheon id, name and code.
pantheonListArticlesread- Returns the Pantheon ERP article catalogue (artikli, šifre, cijene): every licence, hosting and service that can be offered, with code, name, unit, price type (fixed or free) and how the price is computed, for the CLOUD or OWNED location.
pantheonGetOfferread- Returns an offer from Pantheon by key or number, or every offer of a customer by Pantheon id or PIB: the customer, the customer's latest offer (status, amounts, validity, lines) and the list.
pantheonGetPaymentread- Returns the payment state in Pantheon for an offer or an invoice: paid or not, amount due, paid so far, remaining, overdue debt and booked documents.
pantheonCreateCustomerwriteneeds confirmation- Creates a customer in the Pantheon ERP from company and contact details, then links the Starko company to it, or creates the CRM company and its contacts when they are not in the CRM yet. An existing customer with the same PIB is linked instead of duplicated. Needs the person's confirmation before it runs.
pantheonPrepareOfferread- Dry run of a Pantheon ERP offer (ponuda, predračun, dokument 013) for a Starko company: resolves the Pantheon customer, the deal to write onto (or a new one), the contact and the catalogue prices of the lines; returns problems, open questions, the expected total and the exact input for creating the offer. Changes nothing.
pantheonCreateOfferwriteneeds confirmation- Creates an offer (ponuda, predračun, dokument 013) in the Pantheon ERP for a Starko company from catalogue article lines, in one step: links the company to the Pantheon customer when it is not yet linked, writes the offer onto the company's open deal or creates a new deal (amount = the offer's amount without VAT), and moves it to the offer stage. Nothing is written in Starko when Pantheon refuses the offer. Every run creates a new offer. Needs the person's confirmation before it runs.
pantheonRejectOfferwriteneeds confirmation- Rejects a Pantheon offer: sets its status to ODBIJENO with the given reason, saves the reason on the Starko deal and closes the deal as lost. Needs the person's confirmation before it runs.
pantheonCreatePeriodikawriteneeds confirmation- Enters a Pantheon offer into recurring billing from a given month (YYYY-MM; default next month). Can take up to a minute. Needs the person's confirmation before it runs.
pantheonCreateInvoicewriteneeds confirmation- Creates the invoice for a Pantheon offer, for all lines (SVE) or one-off lines only (IMPLEMENTACIJA), with an optional invoice date. An existing invoice is returned instead of created again. Needs the person's confirmation before it runs.
Search
searchWorkspaceread- Searches the whole workspace at once: tickets, conversation threads, clients, companies, tenants, knowledge-base articles, projects, procedures and workflows. Returns up to 5 matches per group, each with a url.
CRM
searchClientsread- Searches CRM clients (people) by name or email, optionally within a company or tenant. Paginated.
searchCompaniesread- Searches CRM companies by text, optionally within a tenant. Paginated.
listTenantsread- Lists or searches CRM tenants (top-level organisations). Paginated.
getClientDetailsread- Returns one CRM client: contact details, description, internal notes, custom attributes, tags and company link.
getCompanyDetailsread- Returns one CRM company: domain, notes, contact fields, custom attributes, tags, tenant link and external id (the ERP customer id when linked).
getTenantDetailsread- Returns one CRM tenant: description, notes, contact fields, custom attributes and tags.
Customer conversations
searchThreadsread- Searches customer conversation threads (email, WhatsApp, Instagram, website chat) by status, channel, client or title. Without a status it returns open threads. Members with restricted visibility see only threads assigned to them.
getThreadDetailsread- Returns one conversation thread: metadata, the stored summary, sentiment score, the client and the most recent messages.
replyToThreadwriteneeds confirmation- Sends a reply to the customer on a conversation thread over its channel. The thread is assigned to the sender if unassigned, AI handling is turned off for it and its status becomes waiting_for_response. Needs the person's confirmation before it runs.
startConversationwriteneeds confirmation- Starts a new e-mail conversation with a CRM contact and sends the first message from the workspace's sending domain: subject and message. Continues the contact's open e-mail thread when one exists. Needs the person's confirmation before it runs.
Knowledge base
searchArticlesread- Lists knowledge-base articles by title, category or visibility.
getArticleContentread- Returns one knowledge-base article's full text (up to 8,000 characters) with its title, category and visibility.
listArticleCategoriesread- Lists the knowledge-base categories.
readWebPageread- Fetches one public web page and returns its title, description and main content as markdown (up to 16,000 characters).
createKbArticlewriteneeds confirmation- Creates a knowledge-base article as an internal draft from a markdown body, with an optional category and source url. The article is embedded into the support AI's knowledge. Needs the person's confirmation before it runs.
updateKbArticlewriteneeds confirmation- Appends a markdown section to an existing knowledge-base article or replaces its body, optionally renaming it. The article is re-embedded afterwards; it cannot publish. Needs the person's confirmation before it runs.
Team
getTeamWorkloadread- Returns per-member workload: open, urgent and overdue ticket counts for every team member, plus the unassigned backlog.
CRM changes
crmWritewriteneeds confirmation- Creates or changes CRM records: clients, companies, tenants and deals. Actions: create (payload; a client needs an email), updateField (id, field, value; an empty value clears), addNote (id, note), setStage (deal id, stage), closeDeal (deal id, outcome won or lost). Editable fields: client name, email, phone, description, client_notes, address, city, state, country, company_id, tenant_id; company name, domain, notes, email, phone, address, city, state, country, tenant_id, external_id; tenant name, description, notes, email, phone, address, city, state, country; deal name, amount, currency, expected_close_at, description, owner_id, company_id, client_id, tenant_id. Needs the person's confirmation before it runs.
searchDealsread- Searches deals in the sales pipeline by name, stage, company, client or tenant. Paginated, 15 per page; amounts are in the deal's currency.
getDealDetailsread- Returns one deal: amount, stage, owner, linked company, client and tenant, expected close, description and tags.
listDealStagesread- Lists the workspace's deal pipeline stages in order: name, slug, kind (open, won or lost) and win probability.
Conversation actions
threadActionwriteneeds confirmation- Changes a conversation thread's state. Actions: assign (member id), unassign, setStatus (done, needs_a_response, investigating, waiting_for_response, paused, ignored), handover (aiEnabled true or false). Needs the person's confirmation before it runs.
Ticket changes
replyToTicketCustomerwriteneeds confirmation- Posts a public reply on a ticket and emails it to the ticket's client, company or tenant. Needs the person's confirmation before it runs.
archiveTicketswriteneeds confirmation- Archives up to 20 tickets by id. Archived tickets are hidden from lists and can be restored; nothing is deleted. Needs the person's confirmation before it runs.
updateTicketswriteneeds confirmation- Changes one or many tickets by id: status (including closing), priority, assignee, dates, project, with an optional resolution comment posted when closing. Tickets that are not visible or fail a close gate are reported as skipped. Needs the person's confirmation before it runs.
Workspace health and inbox
getWorkspaceConfigread- Returns the workspace's health and configuration: connected channels with reconnect state and token expiry, email sending domain status and reply-to, installed MCP connectors and key feature settings. Contains no secrets.
listMyInboxread- Returns the connected person's inbox queue: tickets assigned to them, tickets due today and conversations needing a response, minus items they dismissed. Newest activity first.
getSlaStatusread- Returns SLA status for tickets under an SLA policy: breached and at-risk tickets with remaining or overdue time per timer (first response, resolution). Filters: attention (default), breached, at_risk, all; optional assignee.
Work timers
ticketTimerwrite- Operates the connected person's own work timer on a ticket: start, pause, resume, stop (optionally moving the ticket to a non-closing status) and list running timers with elapsed time.
Analytics queries
queryAnalyticsread- Returns a reporting query over conversations or tickets for 7, 28, 90 or 180 days: totals, medians for first response, resolution and handle time, period-over-period deltas, a created-versus-resolved series and an optional breakdown by source, tag, assignee, customer, status or hour.
Starko AI runs
assignStarkoAiwriteneeds confirmation- Starts an autonomous Starko AI coding-agent run on an existing ticket whose description is the brief; optional repository url and task kind and size. Requires the workspace's GitHub App installation and Starko AI connection. Needs the person's confirmation before it runs.
Starko AI sessions
listStarkoSessionsread- Lists Starko AI coding-agent sessions on the workspace's tickets: the running ones with their phase, pull request and CI state, and with scope "recent" those that ended in the last week with their outcome.
getStarkoSessionread- Returns one ticket's Starko AI session in depth: phase, recent activity, the conversation with the agent, its last reply, unread team messages and the pull request.
steerStarkoSessionwrite- Delivers a message to the Starko AI session running on a ticket, as typing in the ticket's session composer does; interrupt true makes the agent read it at once. Refuses when no session is running.
answerStarkoQuestionwrite- Delivers an answer to a question a Starko AI run asked on a ticket: the answer is posted as an internal comment in the person's name and the run resumes. Refuses when the latest run is not waiting on an answer.
mergeStarkoPullRequestwrite- Merges a pull request opened by Starko AI, given its url or the ticket id. Refuses on failing checks, conflicts, branch protection or a closed pull request; force true allows pending checks or a revise verdict. A draft is marked ready first.
startStarkoSessionwriteneeds confirmation- Opens an interactive Starko AI session on a ticket, continuing its earlier conversation when a message is given, with an optional repository url. Boots a sandbox; progress follows after a minute or two. Needs the person's confirmation before it runs.
endStarkoSessionwriteneeds confirmation- Ends a ticket's running Starko AI session: wrap_up commits, pushes and updates the pull request before ending; stop aborts at once and loses unpushed work. Needs the person's confirmation before it runs.
Recommendations
listRecommendationsread- Lists the open recommendations Starko AI filed from session replays, most sightings first: what visitors got stuck on, as UX gaps and bugs. Optional project id; default 10.
Starko AI crews
dispatchStarkoCrewwriteneeds confirmation- Spreads a goal over up to 5 Starko AI sessions: creates a parent ticket and one sub-ticket per brief in a project, starts the briefs without dependencies and a foreman starts the dependent ones later, reporting on the parent ticket. Needs the person's confirmation before it runs.
Knowledge search
researchDatabaseread- Searches the workspace's knowledge base semantically and returns the best matching passages with their article, title and score.
Data and revocation
The server reads and writes only the workspace data the tools name; nothing from the conversation is stored. Disconnecting the app on its side revokes its tokens, and they also end when the person leaves the workspace or the owner switches MCP access off. Questions: stefan@starko.one.