Stellary: hosted Streamable HTTP MCP for project management (Bearer PAT, not stdio/npx) #851
Anymfah
started this conversation in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Pre-submission Checklist
What would you like to share?
Hi — I'm Soheil. Sharing a hosted MCP server we run for Stellary (AI-native project piloting / project management SaaS, open beta, Paris) and looking for feedback on a few transport and governance choices.
This is not a local stdio or
npxserver. The native remote is Streamable HTTP with a Bearer PAT:https://api.stellary.co/mcpGETandPOST)Authorization: Bearer <personal access token>io.github.Anymfah/stellary-project-managementThe official registry remote is
streamable-httpat that URL and marks theAuthorizationheader required (Bearer YOUR_STELLARY_TOKEN). Discovery and client manifests live in Anymfah/stellary-mcp; they point at the hosted URL. None of them starts a local stdio/npxprocess.How hosted Streamable HTTP + Bearer works
The MCP server is built into the NestJS backend. There is no separate daemon, sidecar, or bridge.
GETis used for discovery / protocol negotiation.POSTcarries the MCP requests.Mcp-Session-Idstill work.Authorization: Bearer. Start with read-only scopes; add write scopes only when required. Treat PATs like passwords and do not commit them.Documented client wiring (URL is Streamable HTTP; attach the Bearer PAT as the Authorization header):
{ "mcpServers": { "stellary": { "url": "https://api.stellary.co/mcp" } } }A good first call is
list_projects: it confirms authentication and project visibility without changing data. Then inspect one project's cards before enabling write scopes.Tool surface (as documented today)
Tools are assembled from core board / cockpit / agent registries plus installed workspace plugins — one endpoint, not one flat usage pattern.
Board read:
list_projects,get_project_details,list_cards,get_card_details,get_card_commentsBoard write & collaboration:
create_card,create_cards_bulk,move_card,update_card,assign_card,add_commentCockpit & supervision:
get_pilotage_state,get_cockpit_dashboard,get_agent_status,list_pending_proposalsAgent runtime:
stellary_init,get_next_mission,wait_for_mission,complete_mission,fail_missionSeveral board tools also accept name-based convenience (exact-or-fuzzy matching). For long-lived agent loops the documented pattern is still: discover IDs first (
list_projects/list_cards), then reuse exact IDs.Installed plugin tools are auto-registered on the same MCP surface when the plugin is installed and enabled. IDs are prefixed by plugin slug. Shipped definitions currently include GitHub, Slack, Email, Discord, and X — for example
github_list_repos,github_create_pr,slack_post_message,email_send_email,discord_post_message,x_create_draft. Those require workspace context plus decrypted plugin configuration and are typically consumed through agent tokens.For agent tokens,
stellary_initis the documented bootstrap: it returns autonomy mode, rules, skills, and the filtered tool list actually available to that agent. The usual loop isstellary_init→get_next_mission/wait_for_mission→ read card/document context → execute with exact IDs →complete_missionorfail_mission.Permissions and governance
Access is rechecked on every call: credential scopes, project access, workspace permissions, agent status and policy, autonomy, and the mission snapshot stay authoritative. The exact tool list is resolved at connection time and checked again for the selected identity on every call. All requests remain subject to Stellary permissions and rate limits.
A human using a PAT acts directly as themselves.
Agent tokens additionally go through the tool-policy / autonomy layer:
autonomoussupervisedapproval_requiredreturn a persisted proposalapprovalMCP-only agents keep the autonomy mode configured in Stellary. In
approvalmode, non-read writes become persisted proposals even when the execution client is external. Suspending an agent disables it immediately.Feedback I'd value
Mcp-Session-Id) — any client-compat pitfalls we should document more loudly?npxentrypoint — does that match how you expect hosted servers to publish?autonomous/supervised/approval) on the same endpoint as human PAT calls — useful, or would you split those surfaces?Happy to answer implementation questions. Full behavior is documented at https://stellary.co/docs/mcp/
Relevant Links
All reactions