Pylon MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Pylon MCP Server show me all unresolved issues"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Pylon MCP Server
An MCP (Model Context Protocol) server for integrating with the Pylon API.
Features
This MCP server provides 38 tools for comprehensive Pylon API integration:
User Management: Get current user, list and search team members
Contacts: List, search, and create contacts
Issues: Full CRUD, search, filter, snooze, and delete issues
Tags: Get, create, add, and remove tags on issues
External Issue Linking: Link/unlink Linear, Jira, GitHub, Asana issues
Issue Followers: Get, add, and remove followers on issues
Similar Issues: Find similar issues by requestor, account, or globally
Knowledge Base: List knowledge bases and create articles
Teams: List, get details, and create teams
Accounts: List and get account details
Attachments: Get metadata and create from URL
Ticket Forms: List available submission forms
Smart Caching: Automatic caching of GET requests with configurable TTL
Retry Logic: Exponential backoff for transient failures (429, 5xx, timeouts)
Related MCP server: MCP Help Scout
Setup
Environment Variables
Set the following environment variables:
PYLON_API_TOKEN: Your Pylon API token (required)PYLON_CACHE_TTL: Cache time-to-live in milliseconds (optional, default: 30000)Set to
0to disable cachingExample:
PYLON_CACHE_TTL=60000for 60-second cache
PYLON_RETRY_MAX: Maximum retry attempts for transient failures (optional, default: 3)Set to
0to disable retriesRetries on: 429 (rate limit), 5xx (server error), network timeouts
Only retries idempotent requests (GET, HEAD, OPTIONS, PUT, DELETE)
Uses exponential backoff with jitter
Respects
Retry-Afterheader (capped at 30 seconds)
PYLON_DEBUG: Set totrueto enable debug logging (optional)Logs request/response details and retry attempts to stderr
HTTP Request Timeout
All Pylon API requests have a 30-second timeout to prevent indefinite hanging. If a request takes longer than 30 seconds, it will fail with a timeout error. This helps identify:
Slow API responses
Network connectivity issues
API performance problems
If you encounter timeout errors, check:
Your network connection
Pylon API status
Whether the operation is legitimately slow (e.g., large data queries)
Retry Behavior
The client automatically retries transient API failures with exponential backoff:
Retried errors: HTTP 429 (rate limit), 5xx (server errors), network timeouts
Not retried: 4xx client errors (400, 401, 403, 404, 422), POST/PATCH requests
Backoff:
min(1000ms × 2^attempt + random jitter, 30s), respectsRetry-AfterheaderDefault: 3 retry attempts. Set
PYLON_RETRY_MAX=0to disable.
Caching Behavior
The server implements intelligent caching to reduce API calls:
Cached Operations: All GET requests (users, contacts, issues, teams, etc.)
Not Cached: POST, PATCH, DELETE operations (creates, updates, deletes)
Default TTL: 30 seconds
Cache Key: Based on endpoint URL and query parameters
Benefits: Reduces API rate limit usage, improves response times for repeated queries
Installation
Option 1: Install from npm (public)
This package is published publicly to npm:
# Run with npx (no auth required)
npx @customer-support-success/pylon-mcp-server
# Or install globally
npm install -g @customer-support-success/pylon-mcp-serverOption 2: Local Development
npm install
npm run buildPublishing Updates (for maintainers)
Preferred: tag and let GitHub Actions publish via npm Trusted Publishing (OIDC)
# Update version in package.json, then tag
git tag vX.Y.Z && git push origin vX.Y.ZCI (.github/workflows/release.yml) will build/test and publish to npmjs with --provenance via trusted publisher.
Manual (maintainers only, if ever needed):
npm run build
npm publish --access publicDevelopment
npm run devTesting
This project includes comprehensive unit tests for all functionality:
# Run tests once
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with UI
npm run test:ui
# Run tests with coverage report
npm run test:coverageTest Coverage:
✅ Attachment API (create from URL, file upload)
✅ User Management (get user, search users)
✅ Issue Management (get, create, update, filter, delete)
✅ Contact Management (get, search, create)
✅ Message Management (get messages with attachments)
✅ External Issue Linking (link/unlink Linear, Jira, GitHub, Asana)
✅ Issue Followers (get, add, remove followers)
✅ Error Handling (404, network errors)
Available Tools
User Tools
pylon_get_me: Get current user informationpylon_get_users: Get all team members and support agentspylon_search_users: Search for team members by name, email, or department
Contact Tools
pylon_get_contacts: List contacts with optional search and limitpylon_search_contacts: Search for contacts by name, email, or companypylon_create_contact: Create a new contact
Issue Tools
pylon_get_issues: List issues within a time range (uses start_time/end_time parameters)pylon_search_issues: Search and filter issues by state, tags, assignee, account, and morepylon_search_issues_by_status: Search by status name (handles custom status mapping automatically)pylon_create_issue: Create a new issuepylon_get_issue: Get details of a specific issuepylon_get_issue_with_messages: Get a complete issue with all messages in one callpylon_get_issue_messages: Get conversation history for an issuepylon_update_issue: Update issue status, priority, assignee, or replace all tagspylon_add_tags: Incrementally add tags to an issue (preserves existing tags, deduplicates)pylon_remove_tags: Incrementally remove specific tags from an issue (leaves other tags intact)pylon_snooze_issue: Temporarily hide an issue until a future datepylon_delete_issue: Permanently delete an issue (⚠️ destructive operation)
External Issue Linking Tools
pylon_link_external_issue: Link an external issue (Linear, Jira, GitHub, Asana) to a Pylon issuepylon_unlink_external_issue: Unlink an external issue from a Pylon issue
Issue Followers Tools
pylon_get_issue_followers: Get the list of followers for an issuepylon_add_issue_followers: Add users and/or contacts as followers to an issuepylon_remove_issue_followers: Remove followers from an issue
Searching by Custom Status
Pylon represents custom statuses (like "Waiting on Eng Input") as a combination of state and tag. We provide two ways to search by status:
Option 1: Use pylon_search_issues_by_status (Recommended)
This tool automatically maps status names to the correct state + tag combination:
# Just use the status name directly:
pylon_search_issues_by_status with status: "Waiting on Eng Input"
# Built-in mappings include:
- "Waiting on Eng Input" → state: on_hold + tag: waiting on eng
- "Waiting on Product" → state: on_hold + tag: waiting on product
- "Escalated" → state: on_hold + tag: escalated
- "In Progress" → state: waiting_on_you + tag: in progress
- "Blocked" → state: on_hold + tag: blockedOption 2: Use pylon_search_issues with explicit state + tag
# Manually specify the combination:
pylon_search_issues with:
- state: "on_hold"
- tag: "waiting on eng"Available Built-in States:
new- New/unread issueswaiting_on_you- Waiting for your responsewaiting_on_customer- Waiting for customer responseon_hold- On hold (often used with custom status tags)closed- Closed/resolved issues
Note: The Pylon API does not support creating messages programmatically. Messages can only be created through the Pylon web UI or original channels (Slack, email, etc.).
Similar Issues Tools
pylon_find_similar_issues_for_requestor: Find similar issues from the same contactpylon_find_similar_issues_for_account: Find similar issues from the same account/companypylon_find_similar_issues_global: Find similar issues across all users and companies
Knowledge Base Tools
pylon_get_knowledge_bases: List all knowledge basespylon_create_knowledge_base_article: Create a new article in a knowledge base
Team Tools
pylon_get_teams: List all support teamspylon_get_team: Get details of a specific teampylon_create_team: Create a new support team
Account Tools
pylon_get_accounts: List all customer accountspylon_get_account: Get details of a specific account
Tag Tools
pylon_get_tags: Get all available tagspylon_create_tag: Create a new tag
Ticket Form Tools
pylon_get_ticket_forms: Get all ticket submission forms
Attachment Tools
pylon_get_attachment: Get attachment metadata (includes a downloadable URL)pylon_create_attachment_from_url: Create an attachment from a URL
Tip: You usually get
attachment_idfrom a message’sattachments[]returned bypylon_get_issue_messagesorpylon_get_issue_with_messages. To download the actual file, fetch the returnedurl(signed URLs may expire).
Usage Examples
Running with Augment Code
Augment Code supports MCP servers through its Easy MCP feature in VS Code and JetBrains IDEs.
Setup in Augment Code (VS Code or JetBrains)
Open Augment Settings:
In VS Code: Open the Augment Code extension settings
In JetBrains: Navigate to Augment settings
Navigate to Easy MCP:
Find the "Easy MCP" pane in the settings
Click the "+" button to add a new MCP server
Configure the Server:
Using npx from npmjs (Recommended)
Add this configuration:
{ "pylon": { "command": "npx", "args": ["@customer-support-success/pylon-mcp-server"], "env": { "PYLON_API_TOKEN": "your_pylon_api_token_here", "PYLON_CACHE_TTL": "30000", "PYLON_RETRY_MAX": "3" } } }Note:
PYLON_RETRY_MAXis optional and defaults to 3. Set to0to disable retries.PYLON_CACHE_TTLis optional and defaults to 30000ms (30 seconds). Set to0to disable caching.Option B: Using local installation
If you've cloned this repository locally:
{ "pylon": { "command": "node", "args": ["/absolute/path/to/pylon-mcp-server/dist/index.js"], "env": { "PYLON_API_TOKEN": "your_pylon_api_token_here", "PYLON_CACHE_TTL": "30000", "PYLON_RETRY_MAX": "3" } } }Get Your Pylon API Token:
Log into your Pylon dashboard
Navigate to Settings → API
Generate or copy your API token
Replace
your_pylon_api_token_herewith your actual token
Test the Integration:
Once configured, you can ask Augment to use Pylon tools:
"Check my Pylon user info" "Show me recent support issues" "Search for a contact by email" "Create a new support ticket"
Running Locally with Claude Desktop
Setup Environment:
# Clone and install git clone <your-repo-url> cd pylon-mcp-server npm install npm run build # Set up environment variables cp .env.example .env # Edit .env and add your PYLON_API_TOKENConfigure Claude Desktop:
Add this to your Claude Desktop MCP settings (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
Using npx from npmjs (Recommended)
{
"mcpServers": {
"pylon": {
"command": "npx",
"args": ["@customer-support-success/pylon-mcp-server"],
"env": {
"PYLON_API_TOKEN": "your_pylon_api_token_here",
"PYLON_CACHE_TTL": "30000",
"PYLON_RETRY_MAX": "3"
}
}
}
}Option B: Using local installation
{
"mcpServers": {
"pylon": {
"command": "node",
"args": ["/path/to/pylon-mcp-server/dist/index.js"],
"env": {
"PYLON_API_TOKEN": "your_pylon_api_token_here",
"PYLON_CACHE_TTL": "30000",
"PYLON_RETRY_MAX": "3"
}
}
}
}Test the Connection:
Restart Claude Desktop and try these commands in a conversation:
Use the pylon_get_me tool to check my Pylon user info
Use pylon_get_issues to show recent support tickets
Search for contacts with pylon_search_contacts using "customer@example.com"Example Tool Usage
Once connected, you can use the available tools:
# User Management
"Get my user info" → uses pylon_get_me
"Search for users named John" → uses pylon_search_users
# Issue Management
"Show all open issues" → uses pylon_get_issues
"Create a new bug report" → uses pylon_create_issue
"Get issue #123 with all messages" → uses pylon_get_issue_with_messages
"Update issue status to resolved" → uses pylon_update_issue
# Similar Issues
"Find similar issues from this customer" → uses pylon_find_similar_issues_for_requestor
"Check if this account has had similar problems" → uses pylon_find_similar_issues_for_account
# Tags
"Show all available tags" → uses pylon_get_tags
"Add a tag to this issue" → uses pylon_add_tags
# External Linking
"Link this Linear ticket to the Pylon issue" → uses pylon_link_external_issue
# Issue Followers
"Add me as a follower on this issue" → uses pylon_add_issue_followers
# Attachments
"Create attachment from URL" → uses pylon_create_attachment_from_url
# Knowledge Base
"List all knowledge bases" → uses pylon_get_knowledge_bases
"Create a new help article" → uses pylon_create_knowledge_base_article
# Ticket Forms
"Show available ticket forms" → uses pylon_get_ticket_forms
# Team & Account Management
"Show all teams" → uses pylon_get_teams
"Get account details" → uses pylon_get_accountsAPI Reference
For more information about the Pylon API, visit the API reference.
Available Tools
38 toolspylon_add_issue_followersA
Add team members (user_ids) or customers (contact_ids) as followers to a Pylon issue.
Inputs: issue_id (required), user_ids, contact_ids.
pylon_add_tagsA
Add tags to a Pylon issue without removing existing tags. To replace all tags, use pylon_update_issue; to remove tags, use pylon_remove_tags.
Inputs: issue_id (required), tags (required).
pylon_create_attachment_from_urlC
Create a Pylon attachment by downloading a file from a public URL.
Inputs: file_url (required), description.
pylon_create_contactC
Create a new customer contact in Pylon. Use carefully.
Inputs: email (required), name (required), portal_role.
pylon_create_issueC
Create a new support issue/ticket in Pylon.
Inputs: title (required), description (required), status (required), priority (required), +1 more.
pylon_create_knowledge_base_articleB
Create a new help article in a knowledge base.
Inputs: knowledge_base_id (required), title (required), body_html (required), author_user_id, +4 more.
pylon_create_tagB
Create a new tag for categorizing issues and contacts.
Inputs: name (required), color.
pylon_create_teamC
Create a new support team in Pylon.
Inputs: name (required), description, members.
pylon_delete_issueA
⚠️ Permanently delete a Pylon issue. This cannot be undone. Verify the correct issue ID before proceeding.
Inputs: issue_id (required).
pylon_find_similar_issues_for_accountB
Find issues from the same company/account to identify company-wide problems.
Inputs: issue_id (required), query, limit.
pylon_find_similar_issues_for_requestorA
Find issues from the same requestor as the source issue to identify recurring patterns.
Inputs: issue_id (required), query, limit.
pylon_find_similar_issues_globalA
Find similar issues across all accounts to identify widespread issues or find past solutions.
Inputs: issue_id (required), query, limit.
pylon_get_accountB
Get details of a specific customer account.
Inputs: account_id (required).
pylon_get_accountsA
Get all customer accounts from Pylon.
Inputs: no named parameters.
pylon_get_attachmentA
Get attachment metadata by ID. Use when you have an attachment_id from an issue message. Download the file using the returned URL.
Inputs: attachment_id (required).
pylon_get_contactsB
Get customer contacts from Pylon. Returns contact details like name, email, and company.
Inputs: search, limit.
pylon_get_issueA
Get complete details of a specific issue. Prefer this over message tools when you only need issue metadata.
Inputs: issue_id (required).
pylon_get_issue_followersA
Get all users and contacts following a Pylon issue.
Inputs: issue_id (required).
pylon_get_issue_messagesA
Get the message history for an issue. Use when you need message content, not just issue metadata.
Inputs: issue_id (required).
pylon_get_issuesA
Get support issues within a time range (max 30 days); defaults to last 30 days. Use this for unfiltered listing. For filtering by state, tags, or custom statuses, use pylon_search_issues instead.
Inputs: start_time, end_time.
pylon_get_issue_with_messagesA
Get an issue with its full conversation history. Prefer pylon_get_issue when you only need issue details.
Inputs: issue_id (required).
pylon_get_knowledge_basesA
Get all knowledge bases in Pylon.
Inputs: no named parameters.
pylon_get_meA
Get the current authenticated user profile including name, email, role, and permissions.
Inputs: no named parameters.
pylon_get_tagsA
Get all available tags for categorizing issues and contacts.
Inputs: no named parameters.
pylon_get_teamA
Get details of a specific support team including members and workload.
Inputs: team_id (required).
pylon_get_teamsA
Get all support teams in Pylon.
Inputs: no named parameters.
pylon_get_ticket_formsB
Get all ticket submission forms available to customers.
Inputs: no named parameters.
pylon_get_usersA
Get all team members and support agents in your Pylon workspace.
Inputs: no named parameters.
pylon_link_external_issueA
Link a Linear, Jira, GitHub, or Asana issue to a Pylon support issue for cross-system tracking.
Inputs: issue_id (required), external_issue_id (required), source (required).
pylon_remove_issue_followersA
Remove team members or customers from following a Pylon issue.
Inputs: issue_id (required), user_ids, contact_ids.
pylon_remove_tagsA
Remove specific tags from a Pylon issue without affecting other tags. To add tags, use pylon_add_tags; to replace all, use pylon_update_issue.
Inputs: issue_id (required), tags (required).
pylon_search_contactsA
Search for customer contacts by name, email, company, or phone.
Inputs: query (required).
pylon_search_issuesA
Search issues using structured filters; requires at least one filter. For unfiltered listing, use pylon_get_issues instead.
Inputs: state, tag, tags, title_contains, +5 more.
pylon_search_issues_by_statusA
Search issues by status name, including custom statuses like "Waiting on Eng Input" or "Escalated". Automatically maps status names to state+tag combinations. For multi-filter searches, use pylon_search_issues instead.
Inputs: status (required), limit.
pylon_search_usersA
Search for team members and support agents by name, email, or department.
Inputs: query (required).
pylon_snooze_issueA
Temporarily hide an issue until a future date/time for deferred follow-up.
Inputs: issue_id (required), until (required).
pylon_unlink_external_issueA
Remove the link between a Pylon issue and an external ticketing system issue.
Inputs: issue_id (required), external_issue_id (required), source (required).
pylon_update_issueA
Update an existing issue's title, description, status, priority, assignee, or tags. To add/remove tags without replacing all, use pylon_add_tags or pylon_remove_tags.
Inputs: issue_id (required), title, description, status, +3 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 38 tools
Each tool has a clear, distinct purpose. Even similar tools like the three find_similar_issues variants are differentiated by scope (account, requestor, global). Descriptions explicitly guide selection between overlapping tools (e.g., get_issue vs get_issue_with_messages, add_tags vs update_issue).
All 38 tools follow the exact same pattern: snake_case with a 'pylon_' prefix and a verb_noun structure. Verbs are consistently used (create, get, update, delete, search, add, remove, snooze, link, unlink). No mixing of camelCase or other conventions.
At 38 tools, this is a large surface area, but each tool serves a specific function for a feature-rich support platform. The count is on the higher end of acceptable; some tools like pylon_get_issue and pylon_get_issue_with_messages could arguably be merged. Overall, it's justified by the breadth of entities managed.
The tool set provides full CRUD for issues, plus extensive operations for contacts, teams, knowledge bases, tags, attachments, and external integrations. Missing: update/delete for contacts and teams, but these are less critical. The search variants cover filtering needs well. Minor gaps exist but don't severely hinder common workflows.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
One MCP server for all your MCP servers: code mode, per-tool permissions, approvals and audit.
MCP server for GLPI: tickets, ITIL, assets, knowledge base. GLPI 10/11. Not affiliated with Teclib'.
Related MCP Servers
- FlicenseCqualityDmaintenanceThis is an MCP server that facilitates building tools for interacting with various APIs and workflows, supporting Python-based development with potential for customizable prompts and user configurations.1-
- AlicenseNot gradedqualityDmaintenanceA comprehensive MCP server that provides full access to Help Scout's Docs and Inbox APIs. It enables users to manage knowledge base articles, collections, and sites while also handling customer conversations, threads, and mailbox operations.MIT
- FlicenseDqualityDmaintenanceA comprehensive MCP server for managing Zendesk Support, Talk, Chat, and Guide products, providing tools for tickets, users, organizations, search, and more.4930-
- AlicenseNot gradedqualityDmaintenanceComprehensive MCP server providing 89 tools and 13 React UI apps for complete Zendesk Support API integration, enabling ticket, user, organization, and automation management.MIT