<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover" name="viewport">
<meta name="csrf-param" content="authenticity_token" />
<script src="/assets/sentry-245788f79168490620e3d74cb4412824be6c420fbad9403fc044ca85bf46404e.js" id="sentry-js" data-sentry-dsn="https://defe1df563d68450688a8d7804057a62@o4505784445370368.ingest.us.sentry.io/4510610453037056" data-traces-sample-rate="0.05" defer="defer"></script>
<script src="/assets/application-0516cdd6f8d22e0908016f51f40366c439b80bba5303e0e26bcdc8b6a69f0265.js" defer="defer" data-turbo-track="reload"></script>
<link rel="stylesheet" crossorigin="anonymous" href="https://kit.fontawesome.com/f440a3ba4a.css" />
<link rel="stylesheet" href="/assets/application-85ff942473415401d825f49b8e91be8833c598117d0e233fef0aa4b45e4e7c8e.css" data-turbo-track="reload" />
<link rel="stylesheet" href="/assets/emoji-72de674d8e4ef8e30de935a172b3fba01acc3c97c348fb2c5b677edd30f9bbf3.css" media="all" data-turbo-track="reload" />
<script async src="https://www.googletagmanager.com/gtag/js?id=G-N3JCRNB4SH"></script>
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon-150eea4d55dbe83d702027083c3fbf3967165f93870e43e51b3e0010db2d8352.png">
<header class="pages-header">
<div class="pages-header__content">
<a class="pages-header__logo" aria-label="SprintFlint home" href="/">
<span class="pages-header__logo-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="25 5 65 90" aria-hidden="true" class="pages-header__logo-svg dark-mode-hide">
<!-- Lightning bolt - bottom half (black) -->
<path d="M 50 50 L 30 90 L 70 45 L 55 45 L 50 50 Z" fill="#262626" stroke="none"></path>
<!-- Forward motion accent -->
<path d="M 75 30 L 85 35 L 75 40" fill="none" stroke="#262626" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"></path>
<!-- Lightning bolt - bottom half (white) -->
<path d="M 50 50 L 30 90 L 70 45 L 55 45 L 50 50 Z" fill="#FFFFFF" stroke="none"></path>
<!-- Forward motion accent -->
<path d="M 75 30 L 85 35 L 75 40" fill="none" stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" opacity="0.9"></path>
<main class="display--flex align-items--center flex-grow--1"> <!-- display--flex required for safari -->
<h1 class="landing-hero__title">
SprintFlint MCP Server.<br>
<span class="landing-hero__title-accent">Sprint state in every editor.</span>
</h1>
<p class="landing-hero__subtitle">
Public Model Context Protocol endpoint at <code>mcp.sprintflint.com</code>. Drop one JSON block into Claude Desktop, Cursor, or Zed (or one CLI command in Claude Code) and the agent reads your sprint, files issues, and posts comments without leaving the chat.
</p>
<div class="landing-hero__cta">
<a class="button button--primary button--large" href="/tools/mcp-config-generator">
<i class="fa-regular fa-rocket mr--3"></i>Generate config
Endpoint
One URL, one auth header. Same bearer token as the REST API.
POST https://mcp.sprintflint.com
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
Accept: application/json, text/event-stream
Generate a token from your account settings. Free tier covers 300 tickets; no card.
Tools
Day-one tools, mapped 1:1 onto the actions a developer takes during a sprint.
<div class="comparison-grid">
<div class="comparison-card">
<div class="comparison-card__icon"><i class="fa-regular fa-folder"></i></div>
<h3><code>list-projects</code></h3>
<p>Search projects in your organisation (paginated). Returns id, name, slug, and counts.</p>
</div>
<div class="comparison-card">
<div class="comparison-card__icon"><i class="fa-regular fa-flag"></i></div>
<h3><code>list-sprints</code></h3>
<p>Search sprints inside a project (paginated). Returns sprint id, goal, start/end dates, and issue counts by status.</p>
</div>
<div class="comparison-card">
<div class="comparison-card__icon"><i class="fa-regular fa-list-ul"></i></div>
<h3><code>list-issues</code></h3>
<p>Search issues inside a sprint (paginated). Filter by status. Returns id, title, status, story points, assignee, labels.</p>
</div>
<div class="comparison-card">
<div class="comparison-card__icon"><i class="fa-regular fa-user"></i></div>
<h3><code>my-issues</code></h3>
<p>Issues assigned to the calling user. The default opening question for any agent: "what am I working on?"</p>
</div>
<div class="comparison-card">
<div class="comparison-card__icon"><i class="fa-regular fa-magnifying-glass"></i></div>
<h3><code>get-issue</code></h3>
<p>Read a single issue by reference (e.g. <code>PROJ-123</code>) including full markdown description and comment thread.</p>
</div>
<div class="comparison-card">
<div class="comparison-card__icon"><i class="fa-regular fa-plus"></i></div>
<h3><code>create-issue</code></h3>
<p>File a new issue into a sprint. Title, description, sprint id, optional priority/labels/assignee.</p>
</div>
<div class="comparison-card">
<div class="comparison-card__icon"><i class="fa-regular fa-pen"></i></div>
<h3><code>update-issue</code></h3>
<p>Update title, description, status, story points, or assignee on an existing issue. All mutations reversible from the UI.</p>
</div>
<div class="comparison-card">
<div class="comparison-card__icon"><i class="fa-regular fa-comment"></i></div>
<h3><code>create-comment</code></h3>
<p>Post a markdown comment to an issue. Used by agents to log PR links, status updates, and surfaced blockers.</p>
</div>
</div>
</div>
What's deliberately not exposed
Two operations we did not ship on day one; both irreversible (or hard to undo) and unsafe to expose blindly to a model that occasionally hallucinates an argument. Update operations are available (every mutation is reversible from the UI) but destruction stays a human decision.
delete-issue: silent destruction of work history. Cost asymmetry too high. Click delete in the UI.delete-sprint: silent breakage of velocity history and sprint planning. Use the board.
Read the design rationale: Sprint state in your agent: the practitioner's guide.
Connect in 30 seconds
Pick your editor. The MCP Config Generator emits the right snippet for each.
<div class="comparison-grid">
<a class="comparison-card" href="/for/claude-desktop">
<div class="comparison-card__icon"><i class="fa-regular fa-comment"></i></div>
<h3>Claude Desktop</h3>
<p>Paste <code>mcpServers</code> block into <code>claude_desktop_config.json</code>. Restart.</p>
<span class="comparison-card__link">Setup <i class="fa-regular fa-arrow-right"></i></span>
Cursor
Settings → MCP → Add server. Same JSON shape.
SetupClaude Code
One CLI command: claude mcp add sprintflint --transport http ...
Zed
context_servers block in ~/.config/zed/settings.json.
Auth, scoping, security
- Auth:
Authorization: Bearer YOUR_TOKEN. Same token as the REST API. - Scope: tokens are scoped to your organisation. No cross-org access.
- Revocation: tokens listed by name + last-used time in account settings. Revoke instantly.
- Recommendation: one token per device (e.g.
claude-desktop-macbook,cursor-work-laptop). Easier to spot orphans. - TLS: Heroku ACM with Let's Encrypt. HSTS preloaded.
- Rate limit: 600 requests/min/token.
429withRetry-Afterheader on exceed.
FAQ
Everything you need to know about the MCP server.
<div class="landing-faq__list">
<details class="landing-faq__item" open>
<summary class="landing-faq__question">
<span>What protocol version does the server speak?</span>
<i class="fa-regular fa-chevron-down landing-faq__chevron"></i>
</summary>
<div class="landing-faq__answer">
<code>2025-06-18</code> (current stable). Also accepts <code>2024-11-05</code> for older clients.
</div>
</details>
<details class="landing-faq__item">
<summary class="landing-faq__question">
<span>Is the MCP server free?</span>
<i class="fa-regular fa-chevron-down landing-faq__chevron"></i>
</summary>
<div class="landing-faq__answer">
Yes; same plan rules as the REST API. Free tier (300 tickets) gets full MCP access. Paid plans (£5/user/month) get unlimited.
</div>
</details>
<details class="landing-faq__item">
<summary class="landing-faq__question">
<span>Does the server support resources or prompts (the other two MCP primitives)?</span>
<i class="fa-regular fa-chevron-down landing-faq__chevron"></i>
</summary>
<div class="landing-faq__answer">
Tools today. Resources and prompts are on the roadmap; see <a href="/roadmap" class="link">/roadmap</a>. The capabilities handshake currently advertises <code>tools</code>, <code>prompts</code>, <code>resources</code>, <code>logging</code>; tool calls are the only fully-implemented primitive on day one.
</div>
</details>
<details class="landing-faq__item">
<summary class="landing-faq__question">
<span>Can I use this server with my own agents (LangChain, autogen, etc.)?</span>
<i class="fa-regular fa-chevron-down landing-faq__chevron"></i>
</summary>
<div class="landing-faq__answer">
Anything that speaks MCP works. Bring your own client. Some non-MCP clients work better with the <a href="/api" class="link">REST API</a>: same data, same auth.
</div>
</details>
<details class="landing-faq__item">
<summary class="landing-faq__question">
<span>What happens if the agent hallucinates a sprint or ticket id?</span>
<i class="fa-regular fa-chevron-down landing-faq__chevron"></i>
</summary>
<div class="landing-faq__answer">
The server returns a structured error. The agent sees the error and (usually) corrects itself. We deliberately omitted destructive tools so the worst-case is a failed read, not a silent delete.
</div>
</details>
<details class="landing-faq__item">
<summary class="landing-faq__question">
<span>Is the server hosted, or can I self-host?</span>
<i class="fa-regular fa-chevron-down landing-faq__chevron"></i>
</summary>
<div class="landing-faq__answer">
Hosted only for now (mcp.sprintflint.com). Self-hosting MCP servers makes sense for offline-first tools, less so for SaaS; your sprint data already lives on our servers.
</div>
</details>
<details class="landing-faq__item">
<summary class="landing-faq__question">
<span>How do I report bugs or request tools?</span>
<i class="fa-regular fa-chevron-down landing-faq__chevron"></i>
</summary>
<div class="landing-faq__answer">
Email <a href="/cdn-cgi/l/email-protection#5e3d31302a3f3d2a1e2d2e2c37302a383237302a703d3133" class="link"><span class="__cf_email__" data-cfemail="1f7c70716b7e7c6b5f6c6f6d76716b797376716b317c7072">[email protected]</span></a>. We read everything.
</div>
</details>
</div>
<p class="landing-faq__contact">
Still have a question?
<a href="/cdn-cgi/l/email-protection#2744484953464453675457554e4953414b4e49530944484a" class="landing-faq__contact-link">Email us</a>;
we usually reply within an hour.
</p>
</div>
Plug your agent in
Free up to 300 tickets, forever. No credit card. Same bearer token works for MCP, REST, and OpenAPI.
</main>
<footer class="footer print:display--none">
<button type="button" class="dark-mode-toggle button button--stroke" data-controller="dark-mode scroll-reveal" data-action="click->dark-mode#toggle" data-scroll-reveal-threshold-value="200" title="Toggle dark mode">
<i class="fa-regular fa-sun dark-mode-show"></i>
<i class="fa-regular fa-moon dark-mode-hide"></i>
<span class="sr-only">Toggle dark mode</span>
</button>
<div class="cookie-consent display--none"
data-controller="cookie-consent">
Server Config
{
"mcpServers": {
"sprintflint": {
"url": "https://mcp.sprintflint.com",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}