Skip to content

MCP Overview & Setup

kendo exposes a Model Context Protocol (MCP) server that lets AI coding assistants manage project work directly from the terminal. Create issues, log time, plan sprints, and search your board — all through natural language.

What is MCP?

MCP is an open protocol that standardizes how AI applications connect to external tools and data sources. Instead of copy-pasting issue IDs or switching between browser tabs, your AI assistant reads project context and takes actions on your behalf.

kendo's MCP server provides:

  • Tools — create, update, search, and delete issues, time entries, epics, sprints, comments, reports, and branch links
  • Resources — read-only access to projects, issues, lanes, sprints, epics, members, teams, and GitHub repos

Authorization & Security

All MCP data is scoped to the authenticated user's role and team access. You only see projects, issues, and data you're authorized to access in the UI — this isn't just filtering, it's programmatic enforcement through Laravel Gates and project accessibility checks.

  • OAuth tokens carry an mcp:use scope that limits what the token can do
  • Project access is checked on every request — you can only interact with projects assigned to your teams or where accessAllProjects is enabled on your role
  • Role-based permissions are enforced per-resource, per-action: each role defines Create, Read, Update (None/Own/All), and Delete (None/Own/All) scopes for 16 resources
  • Project owners automatically get full access to all project-scoped resources in their own projects
  • Admins bypass all permission checks
  • Rate limiting prevents abuse via the throttle:mcp middleware
  • Audit logging records every tool invocation with user, project, tool name, and status

Server URL

The MCP server URL is tenant-specific:

https://{tenant}.kendo.dev/mcp/kendo

Replace {tenant} with your organization's subdomain (e.g., https://acme.kendo.dev/mcp/kendo).

Setup: Claude Code

The quickest way to add kendo is via the CLI:

bash
claude mcp add kendo --transport http https://{tenant}.kendo.dev/mcp/kendo

Or add it manually to your configuration file:

json
{
  "mcpServers": {
    "kendo": {
      "url": "https://{tenant}.kendo.dev/mcp/kendo",
      "headers": {
        "Accept": "application/json, text/event-stream"
      }
    }
  }
}

When you first connect, Claude Code will open a browser window for OAuth authentication. After authorizing, the token is stored locally and refreshed automatically.

Setup: Cursor

In Cursor, go to Settings → MCP Servers and add:

  • Name: kendo
  • Type: sse
  • URL: https://{tenant}.kendo.dev/mcp/kendo

Cursor will prompt for OAuth authorization on first use.

Setup: Claude Desktop

Claude Desktop connects via mcp-remote, a small Node proxy. Requires Node.js 18+.

Add this to your claude_desktop_config.json:

json
{
  "mcpServers": {
    "kendo": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://{tenant}.kendo.dev/mcp/kendo"]
    }
  }
}
OSConfig path
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
Linux~/.config/Claude/claude_desktop_config.json

After saving, fully quit and relaunch Claude Desktop (Cmd+Q on macOS — closing the window is not enough). A browser window will open for OAuth on first launch.

OAuth Flow

kendo uses OAuth 2.0 for MCP authentication:

  1. Your AI client requests authorization from https://{tenant}.kendo.dev/oauth/authorize
  2. A browser window opens for you to log in and approve the connection
  3. The client receives an access token with the mcp:use scope
  4. All subsequent MCP requests include this token in the Authorization header
  5. Tokens are automatically refreshed when they expire

Available Tools

ToolDescriptionPage
create-issueCreate a new issue in a projectIssues
update-issueUpdate an existing issue (including lane changes)Issues
delete-issueDelete an issue permanentlyIssues
search-issuesSearch issues by text and filtersIssues
get-my-issuesGet issues assigned to youIssues
add-commentAdd a comment to an issueComments
update-commentEdit an existing commentComments
delete-commentDelete a comment permanentlyComments
create-time-entryLog time against an issueTime Entries
get-time-entriesQuery time entries with groupingTime Entries
update-time-entryUpdate a time entryTime Entries
delete-time-entryDelete a time entry permanentlyTime Entries
create-epicCreate an epicEpics
update-epicUpdate an epicEpics
delete-epicDelete an epicEpics
get-epicsList epics with progress dataEpics
create-sprintCreate a new sprintSprints
update-sprintUpdate sprint detailsSprints
complete-sprintComplete the active sprintSprints
delete-sprintDelete a planned sprintSprints
link-branchLink a Git branch to an issueBranches
list-reportsList reports for triageReports
create-reportCreate a new reportReports
promote-reportsPromote reports to an issueReports
dismiss-reportDismiss a reportReports
delete-reportDelete a report permanentlyReports
fetch-attachmentFetch attachment bytes (image or text) for multimodal agentsAttachments

Available Resources

URI PatternDescriptionPage
kendo://projectsList all accessible projectsResources
kendo://projects/{id}Project details with GitHub reposResources
kendo://projects/{id}/issuesAll issues in a projectResources
kendo://issues/{id}Single issue with comments and timeResources
kendo://projects/{id}/lanesBoard lanes with issue countsResources
kendo://projects/{id}/sprintsSprint list with issue countsResources
kendo://projects/{id}/epicsEpics with status and progressResources
kendo://projects/{id}/membersProject members for assignmentResources
kendo://projects/{id}/github-reposLinked GitHub repositoriesResources
kendo://teamsTeams and their membersResources

See Also