Integrations
MCP: set HelpStack up by asking
HelpStack speaks MCP (Model Context Protocol), so an AI assistant like Claude can configure your workspace for you. You describe what you want in your own words; it adds the knowledge base articles, the FAQ chips, the agent tools.
"Crawl our help centre, then add a tool that looks up an order by its number and email against
https://api.mystore.si/orders."
This is a setup connection, not a support one. It configures the workspace. It cannot read your conversations or reply to a customer — see What it cannot do.
Quick facts#
| Endpoint | https://helpstack.eu/api/mcp |
| Transport | Streamable HTTP (no local process to install) |
| Auth | A token (Authorization: Bearer hs_…), or sign-in for clients that need it |
| Who can create a token | Owner or admin |
| What a token can do | Whatever your own role allows, in one organization |
| Plan | Starter and up (the mcp flag; ask us if you are on Free and need it) |
| Rate limit | 120 requests a minute, per token |
1. Create a token#
Settings → API tokens → Create a token. Give it a name you will recognise later, like "Claude on my laptop", because that name is how you will know which one to revoke.
The token is shown once. We store only a hash of it, so there is no screen that can show it to you again and no support request that can recover it. If you lose it, revoke it and make another. That takes ten seconds and is the intended path, not a failure.
A token is tied to one organization — the one you were in when you created it. If you belong to several, create one token per organization you want to configure. A token cannot be moved between them, and joining another organization later does not widen a token you already hold.
1b. Choose what the token can do#
When you create a token you tick what it may reach. A token can never do more than you can — your role still applies — and the scopes only narrow it further.
| Scope | What it allows |
|---|---|
settings:read | See channels, agent tools, knowledge base articles and FAQs. |
settings:write | Create and edit agent tools, articles and FAQs, and choose what a channel answers from. Implies settings:read. |
conversations:read | Read customer conversations, including names, email addresses and anything a customer wrote. Growth plan and up. |
conversations:draft | Write draft replies for a person to approve. Cannot send. Implies conversations:read. Growth plan and up. |
conversations:send | Reply to the customer directly, with nobody reviewing it first. A sent message cannot be recalled. Implies conversations:read, and is never implied by conversations:draft. Growth plan and up. |
The two settings: scopes are ticked by default, which is the setup surface
this page describes. The two conversations: scopes are never pre-ticked —
showing an assistant your inbox should be a decision someone makes, not one they
inherit — and they only appear at all on the Growth plan.
Untick settings:write and you get a token that can look at your configuration
and change nothing — useful for letting an assistant audit a setup, or answer
"what have we actually got configured?", without any risk of it editing.
tools/list only shows tools the token can call, so an assistant never sees a
door it cannot open.
2. Connect your assistant#
Claude Code:
claude mcp add helpstack --transport http https://helpstack.eu/api/mcp \
--header "Authorization: Bearer hs_your_token_here"
Claude Desktop and ChatGPT — add a custom connector pointing at
https://helpstack.eu/api/mcp and sign in when it asks. These clients cannot
send a token you paste, so they use a sign-in flow instead: you pick which
organization to connect and approve what the app may do, on a HelpStack page.
Nothing is granted until you approve it, and you can disconnect the app later
from Settings → API tokens.
You do not need to create a token for that route. Tokens are for clients like Claude Code that can set a header themselves.
Codex — it reads the token from an environment variable, so it never lands in your config file:
export HELPSTACK_MCP_TOKEN="hs_your_token_here"
codex mcp add helpstack --url https://helpstack.eu/api/mcp \
--bearer-token-env-var HELPSTACK_MCP_TOKEN
Anything else that speaks MCP over HTTP — point it at the same URL with the same header. There is nothing HelpStack-specific in the transport.
Then ask it to run whoami. It should answer with your organization's name and
your role. If it does, everything below will work.
Two ways to connect#
| Token | Sign-in | |
|---|---|---|
| Who it is for | Claude Code, scripts, anything that can set a header | Claude Desktop, ChatGPT, connector UIs |
| How you set it up | Create a token here, paste it once | Add the URL, approve on a HelpStack page |
| Choosing an organization | Fixed when you create the token | Chosen when you approve |
| Turning it off | Revoke the token | Disconnect the app |
Both end up in the same place: an identity with a role, an organization, and a set of permissions, re-checked on every call.
What it can do#
| Tool | What it does |
|---|---|
whoami | Which organization the token acts for, and with what role |
list_channels | Your channels, with their ids and types |
list_agent_tools | The tools the AI can already call, built-in ones included |
create_agent_tool | Add a tool so the AI can call your API mid-reply. Growth plan and up |
update_agent_tool | Change a tool's description, URL, parameters, or active state |
delete_agent_tool | Remove a tool you created |
get_agent_tool_logs | Recent calls to one tool — the first place to look when it misbehaves |
list_knowledge_base_sources | The websites being crawled, and their status |
add_knowledge_base_url | Crawl a website into the knowledge base |
recrawl_knowledge_base_source | Run a crawl again, reaching further than last time |
delete_knowledge_base_source | Remove a crawled site and its articles |
list_knowledge_base_articles | Every article, with source and status |
add_knowledge_base_article | Write an article by hand |
update_knowledge_base_article | Edit a hand-written article |
delete_knowledge_base_article | Remove one article |
list_knowledge_base_groups | Groups, with article and channel counts |
create_knowledge_base_group | Bundle related articles so they can be targeted |
attach_knowledge_base_groups_to_channel | Choose what a channel answers from |
list_faqs | The FAQ chips on the widget greeting screen |
create_faq | Add an FAQ chip |
update_faq | Change a chip's question, answer, or visibility |
delete_faq | Remove a chip |
list_conversations | Customer conversations, newest first, filterable by status and channel |
get_conversation | One conversation in full, every message in order |
draft_reply | Write a draft into the inbox for a person to approve and send |
send_reply | Reply to the customer directly, with no review |
Reading is available to any member. Writing requires owner or admin, the same as the dashboard: a token belonging to an agent can look but not change. That is checked before your arguments are, so a token without permission learns nothing about a tool by calling it.
The one that ties it together
attach_knowledge_base_groups_to_channel is the step people miss. Adding
articles does not aim them anywhere: a channel with no groups attached searches
your whole knowledge base, which is right for one topic and poor for many.
Group the articles, attach the group, and the AI answers that channel from that
slice.
Answering the hard ones#
With conversations:read and conversations:draft, an assistant can read a
difficult thread and write you a considered answer:
You: Read conversation 4821 and draft a reply. The customer is right that we shipped late, but the refund they are asking for is more than the order.
It calls get_conversation, reads the whole thread, and calls draft_reply.
The draft lands in your inbox exactly like an AI-generated one, and you press
send.
A draft cannot reach a customer. draft_reply never queues a send: the draft
sits inert until a person approves it in HelpStack, where the approval is
recorded against their name.
Sending is a separate scope, conversations:send, and the separation is the
point. conversations:draft does not imply it, nothing else grants it, and it is
never ticked by default. "Write me an answer" and "answer them for me" are
different decisions, so they are different permissions.
If you do grant it, send_reply replies immediately with nobody reviewing it —
the same thing your channels already do when auto-reply is on. It runs the same
language detection and translation the approve button does, so an English answer
does not reach a customer who wrote in Slovenian, and the message is attributed
to the person whose token it is rather than to an anonymous assistant. A sent
message cannot be recalled.
Unsent drafts are marked as such when the assistant reads a thread back, so it never mistakes its own unapproved draft for something the customer has seen.
What it cannot do#
Deliberately, and this is the more useful half of the list:
- It cannot send unless you granted
conversations:send, which is off by default, separate from drafting, and available only on Growth. - It cannot see another organization. The organization comes from the token and is never something a caller passes in, so there is no argument to get wrong and no way to ask about a workspace that is not yours.
- It cannot read your inbox unless you granted that. The conversation scopes are off unless ticked, and unavailable below the Growth plan.
- It cannot exceed your own permissions. A token acts as the person who made it, with that person's role as it is now — demote someone and their tokens lose the same access immediately.
- It cannot outlive your membership. Remove someone from the organization and their tokens stop working on the next call, with no cleanup step.
- It cannot keep a scope your plan lost. Downgrade from Growth and the conversation scopes stop working that day, on tokens already issued.
Worked example#
Setting up a store's support from nothing, in one conversation:
You: Here is our help centre: https://mystore.si/pomoc. Crawl it, then add an FAQ chip asking about delivery times, and a tool that checks order status against our API.
The assistant will call add_knowledge_base_url, then create_faq, then
create_agent_tool — and will usually call list_agent_tools first to avoid
duplicating a tool you already have.
Two things to expect:
- The crawl is not instant. Each run indexes roughly 50 pages and re-running
reaches further, so a large site is covered over several crawls. Ask for
list_knowledge_base_sourcesto see how far it has got. - A tool's description is the important part. It is what the model reads to decide when to call your tool. Ask for it in plain terms — "only use this when the customer gives both an order number and the email they ordered with" — and it will be written into the description where it belongs.
When something is refused#
The errors you are most likely to see, and what they mean:
| Message | What happened |
|---|---|
unauthorized | The token is wrong, revoked, or its owner has left the organization. Make a new one. |
This token belongs to a member who cannot change settings. | The token's owner is an agent or viewer. Writing needs owner or admin. |
Custom agent tools are available on the Growth plan and up. | Exactly that. Reading tools still works. |
Website limit for your plan reached. | Delete a knowledge base source or upgrade. |
invalid arguments: … | The assistant sent a field we do not accept. Unknown fields are refused rather than ignored, so a typo fails loudly instead of quietly doing something else. |
Keeping a token safe#
A token is a password that types itself. Treat it like one:
- One token per place it is used, so revoking one does not break the others.
- Revoke it when you stop using it. Settings → API tokens shows when each was last used, which is usually enough to tell which one is idle.
- Do not paste it into a shared document or a chat. If you have, revoke it — the cost of being wrong is someone reconfiguring your assistant.
- It is not for your customers or your website. It belongs on machines you control.
Related#
- Agent tools — what tools are and how to write a good description.
- Custom agent tools — the integrator's reference for the endpoints your tools call.
- Knowledge base — how crawling and articles behave.
- Feature flags — which capabilities your plan includes.