MCP server
Solar exposes its whole surface over the Model Context Protocol. Your agent creates issues, moves epics, plans sprints, writes the knowledge base, drives a browser and opens pull requests — the same operations you perform in the UI, through the same permission checks, landing in the same activity log.
82
tools
1
endpoint
100/min
rate limit
JSON-RPC 2.0
protocol
If you skipped the spec
The Model Context Protocol is a small JSON-RPC contract between an agent and a system it needs to touch. The server advertises a list of tools — each one a name, a description, and a JSON schema for its arguments. The agent picks one and calls it. That is the entire idea.
It matters because you write the integration once. The same Solar server works in Claude Code, Claude Desktop, Cursor, Windsurf, or the agent you wrote yourself last Tuesday. No SDK per client, no glue per model.
Most products bolt a chat box onto the sidebar and call it AI. That gives the model your text. MCP gives it your buttons.
initializeClient says hello. Server answers with protocol version 2024-11-05 and its capabilities.
tools/listServer returns the tools this token is allowed to see — up to all 82, with schemas.
tools/callAgent invokes one by name with arguments. Server runs it as you and returns the result.
Solar answers POST with a JSON body. There is no server-initiated stream — a GET to the endpoint returns 405, and nothing in the tool surface needs one.
Connect
The token is the endpoint. Solar puts it in the path rather than a header, so any client that can hit a URL can talk to Solar — no custom auth block, no OAuth dance.
Generate a token
Settings → MCP Tokens → Create Token. Pick the projects it can reach and whether each is read or full.
Copy it once
Solar stores a bcrypt hash, not the token. It is shown exactly once, at creation. Lose it and you make a new one — which is the correct behaviour and still annoying.
Paste the URL into your client
Append the token to https://app.projectsolar.space/api/mcp/ and hand that to your MCP config.
Ask it to list your issues
If list_projects comes back with your projects, you are connected. If it returns 401, the token is wrong or revoked.
{
"mcpServers": {
"solar": {
"type": "http",
"url": "https://app.projectsolar.space/api/mcp/a4f21c9b7e0d3856fa1b62c4d9e07f35b8c21a6d4e93f057c1b8a2e64d7f039c"
}
}
}Same block works for Claude Code, Cursor and Windsurf. Swap the hex for your own token.
claude mcp add --transport http solar \ https://app.projectsolar.space/api/mcp/a4f21c9b7e0d3856fa1b62c4d9e07f35b8c21a6d4e93f057c1b8a2e64d7f039c
Writes the same entry for you. Use --scope project to commit it to the repo — and then remember that you have just put a live credential in git. Prefer --scope user.
{
"mcpServers": {
"solar": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://app.projectsolar.space/api/mcp/a4f21c9b7e0d3856fa1b62c4d9e07f35b8c21a6d4e93f057c1b8a2e64d7f039c"
]
}
}
}Some clients still launch MCP servers as local processes rather than calling a URL. mcp-remote is the usual bridge: it speaks stdio to the client and HTTP to Solar.
The whole surface
13 of these come with any token. 69 need full access on the project. A project or token config can switch individual tools off; they still appear in tools/list, prefixed (DISABLED), so the agent knows the tool exists and that it may not use it.
82 tools across 12 groups
Where an agent starts. Everything else takes a projectId.
list_projectsreadEvery project the token can reach.
list_orgsreadgod modeEvery organisation. God-mode tokens only.
The bulk of the traffic. Read, write, comment, or create thirty at once.
list_issuesreadIssues in a project, with filters.
get_issuereadFull issue: comments, labels, custom fields, attachments. Images come back as MCP image blocks.
resolve_issue_keyreadTurn SOL-1 into a UUID.
create_issuefullNew issue. Type, priority, points, epic, queue, sprint, assignee.
update_issuefullChange any of the above, including status.
batch_create_issuesfullMany issues, one transaction.
add_commentfullComment on an issue.
Grouping above the issue. Deleting one unlinks its issues, it doesn't delete them.
list_epicsreadEpics in a project, filterable by status.
get_epicreadOne epic and all its issues.
create_epicfullNew epic.
update_epicfullEdit an epic.
delete_epicfullDelete an epic. Its issues survive, unlinked.
batch_create_epicsfullMany epics, one transaction.
Queues cut work by team. Sprints cut it by time. Agents read both, write queues.
list_queuesreadQueues in a project, with issue counts.
list_sprintsreadSprints in a project.
create_queuefullNew queue.
update_queuefullEdit a queue.
delete_queuefullDelete a queue. Its issues survive, unlinked.
Agents read the KB for context and write it back. Edits create a revision.
search_kbreadRanked full-text search across every article.
list_kb_sectionsreadSection tree.
list_kb_articlesreadArticles by section, tag, or query.
get_kb_articlereadArticle body, metadata, tags, links.
create_kb_articlefullNew article with title, content, section, tags.
update_kb_articlefullEdit an article. Auto-creates a revision.
delete_kb_articlefullDelete an article.
create_kb_sectionfullNew section.
link_kb_articlefullLink an article to an issue, epic, or another article.
batch_create_kb_articlesfullMany articles at once.
Agents are first-class workers in Solar — they get a record, and skills attached to it. Yes, an agent can register another agent.
list_agent_resourcesfullNon-human workers in an org.
create_agent_resourcefullRegister a new non-human worker.
update_agent_resourcefullEdit one.
delete_agent_resourcefullRemove one.
set_agent_skillsfullReplace the skill links on an agent with a list of skill IDs.
list_solar_skillsfullSkills, optionally by category. Where you get the IDs.
create_solar_skillfullDefine a new skill.
update_solar_skillfullEdit a skill's name, category, content, or active flag.
A real browser session, driven step by step. Open one, get a sessionId, then act against it.
browser_openfullStart a session. Returns a sessionId.
browser_closefullEnd the session, free the resources.
browser_navigatefullGo to a URL.
browser_clickfullClick by CSS selector or text.
browser_fillfullType into an input.
browser_selectfullPick a dropdown option.
browser_press_keyfullEnter, Tab, Escape, whatever.
browser_snapshotfullAccessibility tree of the current page.
browser_screenshotfullScreenshot, base64.
browser_assert_textfullAssert text is on the page.
browser_assert_elementfullAssert a selector matches.
browser_waitfullWait for a selector, or a timeout.
browser_evaluatefullRun JS in page context, get the result back.
browser_new_tabfullNew tab in an existing session.
browser_switch_tabfullSwitch by tab ID.
browser_close_tabfullClose by tab ID.
browser_list_tabsfullList the tabs.
Saved browser scripts, plus a natural-language directive that compiles to one. Runs are async — you poll.
run_directivefullRun a plain-English browser directive. Async, returns a runId.
run_test_scriptfullRun a saved script by ID.
get_run_statusfullStatus, summary, and every step of a run.
create_test_scriptfullNew reusable script: steps, variables, tags.
get_test_scriptfullOne script, in full.
list_test_scriptsfullScripts for an org, filterable by project or tag.
update_test_scriptfullEdit a script.
delete_test_scriptfullDelete a script.
Enough to take a ticket to an open PR without leaving the conversation.
github_list_reposfullRepos for an org.
github_get_repofullOne repo's details.
github_create_repofullNew repository.
github_create_branchfullNew branch.
github_push_filesfullPush one or more files to a branch.
github_create_prfullOpen a pull request.
Ship it and then read the build logs when it goes red.
vercel_list_projectsfullProjects on the connected account.
vercel_create_projectfullNew project, optionally linked to a repo.
vercel_set_env_varsfullSet environment variables.
vercel_get_deploymentfullRecent deployments for a project.
vercel_get_build_logsfullBuild logs for one deployment.
vercel_add_domainfullAttach a custom domain.
Pages, Workers, and the DNS records nobody wants to click through the dashboard for.
cloudflare_create_pages_projectfullNew Pages project, optionally linked to a repo.
cloudflare_get_deploymentsfullRecent Pages deployments.
cloudflare_set_env_varsfullSet environment variables on a Pages project.
cloudflare_create_workerfullCreate or update a Worker script.
cloudflare_manage_dnsfullCreate, list, or delete DNS records in a zone.
Zero to a repo with starter files in two calls.
list_project_templatesfullAvailable templates, filterable by framework.
scaffold_projectfullPush a template's starter files into a GitHub repo.
Security model
That is the deal. It is what makes the server useful and it is the thing to think about before you hand a token to something that writes its own plans.
The token is you
A token acts as the user who created it. Nothing more, nothing less. An agent holding a full-access token can create, edit and delete exactly what that person can — including deleting epics and queues. Scope tokens to the projects the agent actually needs.
Two access levels, per project
Every project on a token is marked read or full. Read tokens see 13 tools and cannot mutate anything. Full unlocks the other 69. Where a token spans several projects, Solar merges their configs to the most restrictive.
The URL is a secret
The token sits in the path, which makes setup trivial and makes the whole URL a credential. It will end up in your MCP config file and possibly in proxy logs. Do not paste it into a ticket, a screenshot, or a repo. Solar keeps only a bcrypt hash, and you can revoke a token at any time.
Nothing is invisible
Every agent action lands in the same activity feed as human work, tagged mcp and labelled with the token's name. Every tool call is logged with the tool name and whether it succeeded. If an agent made a mess on Tuesday, you can see it.
Client-safety rules still apply
Projects can force agent-created issues to internal and agent comments to private, and can disable named tools outright. The agent's copy of the tool list reflects those rules — it is told a tool is disabled rather than discovering it via an error.
God mode is deliberate
A token scoped to project * with full access reaches every project in every org, and gains list_orgs. It is admin-only and it is exactly as dangerous as it sounds. Most agents do not need it.
Limits100 requests per minute per token. Over that, the server returns JSON-RPC error −32000 with a Retry-After header. Agents in a tight loop will hit this; well-written ones back off.
Give it a token and a project. It can do the rest of this page itself.
14-day trial · no credit card · unlimited MCP tokens