Developer docs
Embed the widget, connect Cursor or Claude, and read the script options.
Developer reference
Embed snippets, options, and hosting notes. Open a section to see details.
Serve /ticketing-standalone.js from your deployed hub (it bundles public/ticketing-standalone.bundle.js built by pnpm build or pnpm exec tsup).
Basic embed
<script src="https://tkt.coteries.com/ticketing-standalone.js?apiKey=YOUR_API_KEY&lang=en" referrerpolicy="origin"></script>Conditional load
Inject the script only when your rule matches (cleanup on unload is unnecessary — the hub script initializes once).
<script>
(function () {
if (window.location.hostname !== 'staging.example.com') return
var s = document.createElement('script')
s.src = 'https://tkt.coteries.com/ticketing-standalone.js?apiKey=YOUR_API_KEY&lang=en'
s.referrerPolicy = 'origin'
document.head.appendChild(s)
})()
</script>Default embed: query parameters on /ticketing-standalone.js. The hub validates the embedding page’s host against your allowed domains, then serves the widget and calls initTicketing with assistantUrl, shortcuts from the project, and locale from lang. Optional onlyOpenOn (glob on the page URL, * wildcard) limits those keyboard shortcuts; window.Tktries.open* is unchanged. You can also open the dialog from your own UI with window.Tktries?.openTicket(), window.Tktries?.openChat(), and window.Tktries?.openTktries() (each returns a Promise).
apiKey (query)
RequiredProject API key. Also sent as X-Api-Key from the widget. Appears in URLs and logs — use referrerpolicy="origin" on the script tag when possible.
lang (query)
Optionalen, fr, or de (default en).
Self-hosted bundle
AdvancedLoad ticketing-standalone.bundle.js and call window.initTicketing yourself with assistantUrl, apiKey, locale, and shortcuts.
Shadow DOM
Isolated styles so the widget does not clash with your page.
Messages and events
Open the dialog via postMessage or custom DOM events.
Keyboard shortcut
Default Cmd/Ctrl + M; override per project in the dashboard.
For the live demo above: set NEXT_PUBLIC_APP_URL (or rely on localhost in dev), NEXT_PUBLIC_TKT_API_KEY from the dashboard, and allow your current host (e.g. localhost) for that key.
Cursor & Claude MCP integration
Connect Tktries to Cursor, Claude Code, and Claude Desktop via a hosted MCP endpoint. Enable MCP in your project embed settings—one API key grants access to that project only.
Available tools
get_project — Confirm which project your API key is scoped to.
list_tickets — List tickets with optional status and workflow filters.
get_ticket — Fetch full ticket detail including description, page URL, and console context.
update_ticket — Patch title, description, assignee, or workflow status.
complete_ticket — Mark a ticket done and optionally append a fix note.
Cursor configuration
Add to ~/.cursor/mcp.json (or .cursor/mcp.json in your repo). Replace YOUR_PROJECT_API_KEY with your project API key, then restart Cursor. Same hosted-URL pattern as Sentry—no extra package required.
{
"mcpServers": {
"tktries": {
"url": "https://tkt.coteries.com/api/mcp?api_key=YOUR_PROJECT_API_KEY"
}
}
}Claude Code
Add to .mcp.json in your project root (or the mcpServers section of ~/.claude.json for all projects). Use type http with the hosted URL below, replace YOUR_PROJECT_API_KEY, then restart Claude Code.
{
"mcpServers": {
"tktries": {
"type": "http",
"url": "https://tkt.coteries.com/api/mcp?api_key=YOUR_PROJECT_API_KEY"
}
}
}Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json on macOS (or the equivalent path on Windows/Linux). Claude Desktop uses stdio locally—mcp-remote bridges to the hosted Tktries endpoint. Replace YOUR_PROJECT_API_KEY, then fully quit and reopen Claude Desktop.
{
"mcpServers": {
"tktries": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://tkt.coteries.com/api/mcp?api_key=YOUR_PROJECT_API_KEY"
]
}
}
}Do not commit your API key. Prefer local config files that are gitignored. Rotate the key in embed settings if it is exposed.

