Answer your FAQ inside the MCP server, before a ticket exists
Mount a support_ask tool in your MCP server. It matches the user's question against a short list of rules you write from your FAQ, answers in the chat with no model call, and lists the account's recent errors. If no rule matches, it says so and points at support_open_ticket. Most questions end there, and the rest reach your team with the context attached.
Why answer in the chat
A user of your MCP server is inside Claude, ChatGPT or Cursor. They do not open your help centre. When something fails they ask the agent, and the agent can only use the tools your server gives it. If one of those tools answers from your FAQ, the user gets the fix in the same conversation. No ticket is opened and nobody waits.
Step by step
- 1. List the questions you already answer
Take the last 20 support emails or chats. Group them. Keep the 3 to 10 questions that come back most: credits, a missing connection, a rate limit, a permission, a stale tool list.
- 2. Write each answer as a rule
A rule is a few words to match, the answer in one or two plain sentences, and optionally the tool the agent should call next. The answer comes from your docs or FAQ, not from a model.
- 3. Match in code, with no model call
Lower-case the question and look for the words. A rule match is fast, free and the same every time. The user reads exactly what you wrote.
- 4. Add the recent errors of the account
Return the last failed calls of this user next to the answer. The agent can say what went wrong, and a person gets the same list if a ticket follows.
- 5. Point unknown questions at the ticket
If no rule matches, say so and name support_open_ticket as the next tool. Never invent an answer. A wrong answer in the chat costs more than a ticket.
- 6. Tell the agent when to call it
Add one sentence to your server instructions and to every tool error: if this keeps failing, call support_ask. Without that sentence the agent will not know the tool is there.
The tool, in code
A plain version you can write yourself. The rules are examples: replace them with your own answers.
// support_ask: match the question against answers you already give. No model call.
type Rule = { match: string[]; answer: string; nextTool?: string };
const rules: Rule[] = [
{ match: ["credit", "balance", "out of"], answer: "Your balance is empty. Top up in the web app, then try again.", nextTool: "get_balance" },
{ match: ["rate limit", "too many", "429"], answer: "You hit the hourly limit. Wait a few minutes and retry." },
{ match: ["not connected", "connect", "sign in"], answer: "Your account is not linked yet. Open Settings, Connections, and link it." },
];
function supportAsk(question: string, recentErrors: string[]) {
const q = question.toLowerCase();
const hit = rules.find((r) => r.match.some((w) => q.includes(w)));
if (hit) return { answer: hit.answer, nextTool: hit.nextTool, recentErrors };
// Never guess. Say it is not covered and point at the ticket.
return {
answer: "I do not have a ready answer for this.",
nextTool: "support_open_ticket",
recentErrors,
};
}Or mount it with one call
The @canhelpto/mcp-support package adds support_ask, support_open_ticket and support_ticket_status, records the last calls of each user and adds a support hint to every tool error. You pass the rules.
import { withSupport } from "@canhelpto/mcp-support";
withSupport(server, {
apiKey: process.env.CANHELPTO_API_KEY!,
product: "Example Product", // an example name: use your own
user: (extra) => ({ id, name, email }), // your existing user lookup
rules: [
{ match: ["credit", "balance"], answer: "Your balance is empty. Top up in the web app.", nextTool: "get_balance" },
],
});What good rules look like
- Short answers: one or two sentences and one next step.
- Facts you can defend: copy them from your docs, error messages and pricing page.
- No promises: do not write a deadline or a refund unless a person decides it.
- Questions about the account, a bug or a payment go to a ticket, not to a rule.
canhelpto gives you the ticket side: the three tools, an inbox for your team, and the reply sent back by email and through the connector. The calls are in the docs for agents. Plans are on the pricing page. Related: handle MCP tool errors so the user gets help.