Pylon Managed MCP Server
The Pylon managed MCP server lets agents search and read Pylon issues, accounts, contacts, and knowledge-base articles through a shared API token. Write tools, customer-visible replies, and knowledge-base tools stay off until you enable them, so you decide how much an agent can change.
After reading this page, you will be able to:
-
Configure the Pylon managed MCP server with an API token stored in the secret store
-
Configure which tool groups the server exposes with the write, customer-reply, and knowledge-base settings
-
Search, read, and update Pylon issues from the Inspector or an agent
What this MCP server does
Wraps the Pylon REST API so an agent can:
-
Search issues with structured filters and free text, and read an issue with its full conversation thread.
-
Look up accounts, contacts, and Pylon agent users.
-
Read the custom-field definitions and allowed option values configured in your workspace.
-
Create and update issues, accounts, and contacts, add internal notes, reply to customers, and create or update knowledge-base articles, after you turn on the write settings.
The server is read-only by default. Turning on Allow writes adds the tools that create and update records and add internal notes. Customer-visible replies need a second setting, Allow customer replies, because a reply goes to the requester and is a different class of action from an internal edit. Knowledge-base tools appear only when you set a knowledge base ID.
Every call runs under one API token rather than as any Pylon user. Pylon shows the token’s name on each action the agent performs, so actions carry no per-user attribution and users see no consent flow.
The server trims responses for agents. Issue, message, and article bodies arrive as Markdown, and the server drops routing metadata, follower lists, and other verbose fields.
It is not a Pylon administration tool. You manage ticket forms, macros, teams, tags, and user roles in Pylon.
Prerequisites
Before you create the server, make sure you have:
-
A Pylon workspace served from Pylon’s US API host. See Limitations.
-
The Admin role in Pylon, because Pylon allows only Admins to create API tokens.
-
One Agentic Data Plane secret-store entry for the token, named in
UPPER_SNAKE_CASE, for examplePYLON_API_TOKEN. -
Optional: The ID of the knowledge base if the agent needs to read or write its articles. Pylon’s knowledge-base API reference describes how to list knowledge bases and their IDs.
Get a Pylon API token
Create the token in Pylon, then store it in Agentic Data Plane:
-
In the Pylon dashboard, open the API tokens page at
https://app.usepylon.com/settings/api-tokens. Only Pylon Admins can create tokens. -
Create a token and name it after the agent that uses it, for example
redpanda-support-agent. Pylon labels every action the token performs with this name. -
Copy the token value.
-
Store it in the Agentic Data Plane secret store under a name like
PYLON_API_TOKEN.
The token acts under its own name rather than as a user. Limit what an agent can change with the Allow writes and Allow customer replies settings when you configure the server, not with the token.
If you want the knowledge-base tools, also note the ID of the knowledge base. You can list your knowledge bases and their IDs with Pylon’s knowledge-base API, and the create form’s help text describes where the ID appears in the Pylon app.
Configure
Create a new Pylon MCP server in Agentic Data Plane:
-
Open MCP servers in the sidebar.
-
Click Add MCP server.
-
Click the Pylon card in the marketplace picker.
-
Replace the suggested
Name, and optionally add aDescription. -
In the Pylon configuration form:
Field Notes API tokenSecret-store reference for the Pylon API token, in
UPPER_SNAKE_CASE, for examplePYLON_API_TOKEN. Leave any other authentication field at its default. The server always sends the token as a bearer token.Knowledge base IDOptional. Enables the knowledge-base article tools. Leave it empty to omit them.
Allow writesOff by default. When on, the server also registers the tools that create and update issues, accounts, contacts, and knowledge-base articles, and the tool that adds internal notes.
Allow customer repliesOff by default. When on together with
Allow writes, the server also registersreply_to_issue, which sends a customer-visible reply under the token’s name. Leave it off to restrict an agent to internal notes. -
Click Create server.
The create form turns Enable code mode on by default for this server type. rpk ai mcp-server create leaves it off unless you pass --code-mode. See Code Mode.
Configure from the CLI
Run rpk ai mcp-server create with the Pylon --managed.config payload:
rpk ai mcp-server create acme-pylon --enabled --managed.config '{
"@type": "type.googleapis.com/redpanda.mcps.pylon.v1.PylonMCPConfig",
"api_token": {
"key_secret_ref": "PYLON_API_TOKEN"
},
"knowledge_base_id": "<knowledge-base-id>",
"allow_writes": true,
"allow_customer_replies": false
}'
Replace <knowledge-base-id> with the ID of your Pylon knowledge base. Omit knowledge_base_id, allow_writes, and allow_customer_replies for a read-only server without knowledge-base tools. Pass --enabled, because a server created without it stays disabled until you update it.
Tools
Which tools the server registers depends on the Allow writes, Allow customer replies, and Knowledge base ID settings. An agent sees only the registered tools in its tool list.
Always available
| Tool | Description |
|---|---|
|
Search issues with a structured filter, free text, or both. Filter by account, assignee, team, type, tags, and state, exclude states, tags, or teams, and bound the results by creation, update, or resolution time. Returns a page of issues and a cursor for the next page. |
|
Return every issue created in a time window. Pass both bounds, and keep the window at or under 365 days. A page holds 100 issues unless you set |
|
Fetch one issue by its ID or its issue number. Set |
|
Return an issue’s conversation thread, oldest first, with optional paging. Accepts the issue ID or the issue number. Omitting |
|
Search accounts (companies) by name, domain, or tags. |
|
Fetch one account by ID. |
|
Search contacts (customer users) by name, email, or account. |
|
Fetch one contact by ID. |
|
List the Pylon agent users in the workspace. The results leave out deactivated users, so a page can hold fewer users than |
|
Fetch one Pylon user by ID. |
|
Return the custom-field definitions for an object type ( |
|
Return the Pylon workspace the token belongs to. Useful for confirming that the token works. |
With Allow writes
| Tool | Description |
|---|---|
|
Open a new issue with a subject and a Markdown body, plus optional account, requester, assignee, priority, tags, and custom fields. |
|
Change an issue’s subject, state, assignee, account, requester, type, tags, or custom fields. Only the fields you pass change, and passing |
|
Post an internal note on an issue. Notes are visible to Pylon agents only, never to the requester. |
|
Create an account with a name and optional domains, tags, and custom fields. |
|
Change an account’s tags or custom fields. |
|
Create a contact with a name, an email address, and optional custom fields. |
|
Change a contact’s custom fields. |
With Allow writes and Allow customer replies
| Tool | Description |
|---|---|
|
Send a customer-visible reply on an issue. Requires the |
With a knowledge base ID
| Tool | Description |
|---|---|
|
List the articles in the configured knowledge base. Returns metadata only. |
|
Fetch one article with its published body as Markdown. |
|
Also needs |
|
Also needs |
Page through results
Each tool that takes a limit pages its results. A response carries next_cursor and has_next_page, and you pass next_cursor back as cursor to read the following page. A non-empty next_cursor always means more records are waiting, because the server clears the cursor when has_next_page is false.
Set limit to change the page size:
| Tool | Default page | Maximum |
|---|---|---|
|
100 |
500 |
|
25 |
100 |
|
25 |
50 |
|
Whole thread |
1000 |
The server rejects a limit outside its range before the call reaches Pylon, along with a missing record ID, a text field longer than its maximum, and a malformed email address on create_contact. A subject or article title holds up to 500 characters, an issue, reply, or note body up to 65536, an account or contact name up to 256, and an article body up to 524288. The error names the argument to fix, so an agent can correct its own call instead of reading a bare status code.
Examples
The examples in this section assume https://aigw.<cluster-id>.clusters.rdpa.co/mcp/v1/acme-pylon is your MCP server URL and that you have already authenticated to the gateway. Replace <cluster-id> with your cluster ID and $TOKEN with a gateway access token.
Find open issues for an account
Combine a state filter with free text to narrow a queue:
curl -s https://aigw.<cluster-id>.clusters.rdpa.co/mcp/v1/acme-pylon \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_issues",
"arguments": {
"filter": {
"account_id": "<account-id>",
"states": ["new", "waiting_on_you"]
},
"search_text": "login",
"limit": 10
}
}
}'
Replace <account-id> with the account ID from a search_accounts result.
Read an issue with its thread
Use the issue number people quote in Pylon. The thread comes back oldest first.
curl -s https://aigw.<cluster-id>.clusters.rdpa.co/mcp/v1/acme-pylon \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_issue",
"arguments": {
"issue_id": "10432",
"include_messages": true
}
}
}'
Set a custom field safely
Read the allowed options first, then write the option’s slug. This example needs Allow writes.
curl -s https://aigw.<cluster-id>.clusters.rdpa.co/mcp/v1/acme-pylon \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "get_custom_fields",
"arguments": { "object_type": "issue" }
}
}'
Pick a field slug and one of its option slugs from the response, then update the issue:
curl -s https://aigw.<cluster-id>.clusters.rdpa.co/mcp/v1/acme-pylon \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "update_issue",
"arguments": {
"issue_id": "10432",
"custom_fields": { "<field-slug>": "<option-slug>" }
}
}
}'
Replace <field-slug> and <option-slug> with a field slug and one of its option slugs from the get_custom_fields response.
Troubleshooting
Common symptoms and fixes:
| Symptom | What to check |
|---|---|
|
An argument is out of range, missing, or too long, for example a |
|
The token was revoked or the secret holds the wrong value. Create a new token in Pylon and update the secret under the same name. |
|
Pylon rejected the request. The server drops Pylon’s error message on purpose, so repeat the change in the Pylon app to see the reason, or compare the payload with the field’s definition from |
A tool is missing from the tool list |
It sits behind |
|
Pass both bounds, and split a longer range into windows of at most 365 days. |
|
Fetch the thread with |
|
The issue arrived by email, so the reply needs the requester’s address, and the issue has no requester or the requester’s contact record has no primary email. Add a primary email to the contact in Pylon, or reply from the Pylon app. Posting an internal note with |
|
The server couldn’t read the issue, or the requester’s contact, to address the reply, so it sent nothing. Confirm the issue ID, and that the API token’s workspace can read the issue and its contacts. Retry after fixing it: no partial reply was sent. |
|
Pass a Pylon user ID from |
A custom-field write succeeded but nothing changed |
The option slug is not one of the field’s allowed options. Read them with |
A call fails because the response is too large |
The gateway caps responses at 10 MiB. Lower |
Limitations
-
Regional hosts: The server connects to Pylon’s US API host only. It does not support workspaces on Pylon’s EU host.
-
Per-user identity: The server offers no OAuth option. Every call runs under the shared token, and Pylon attributes every action to the token’s name.
-
Pylon administration: You manage ticket forms, macros, teams, tags, user roles, and knowledge-base collections in Pylon.
-
Priority: The
create_issuetool can set one of Pylon’s priorities, but Pylon issues never return a priority value and the server cannot filter on one. Workspaces that track priority in a custom field can read and write it throughcustom_fields. -
Custom-field object types: The
get_custom_fieldstool acceptsissue,account,contact,task,project, andopportunity. Pylon’smeetingobject type is not available.