Atlas / MCP servers / noveum / orbit

orbitBLOCK

mcp/noveum/orbit

Free, open source, realtime task manager. Issues, boards, sprints, projects and docs that sync instantly. Keyboard-first, self-hostable, with an MCP server for AI agents. No pricing, ever.

Verdict
BLOCK
Grade
F
Trust score
51 /100
Exposed tools
94 40r · 39w · 15d
Transport
streamable-http
License
Apache-2.0
Stars
61
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

A free, realtime, keyboard-first task manager.

Issues, boards, sprints, projects and docs that update the moment anyone changes anything. The polish you expect from a paid task manager, with no per-seat bill at the end of the month.

No pricing. No billing. No paid tiers. Not now, not later.

[](https://github.com/Noveum/orbit/actions/workflows/ci.yml) [](https://github.com/Noveum/orbit/releases/latest) [](LICENSE) [](https://github.com/Noveum/orbit/stargazers) [](https://github.com/Noveum/orbit/commits/main) [](https://github.com/Noveum/orbit/commits/main)

[](https://github.com/Noveum/orbit/labels/good%20first%20issue) [](CONTRIBUTING.md) [](https://bun.sh) [](https://noveum.ai)

**Live demo** · **Documentation** · Quick start · **Releases** · Changelog · Self-host · Contribute

Self-hosting status: Preview. The reposito
Read from source at commit 884ca9206734OBSERVED · 2026-10-08
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add shared -- npx -y @orbit/[email protected]
claude-desktop
{
  "mcpServers": {
    "shared": {
      "command": "npx",
      "args": [
        "-y",
        "@orbit/[email protected]"
      ]
    }
  }
}
03

Exposed tools (94)

40 read · 39 write · 15 destructive. Blast radius: 15 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
Alpharead
Betaread
DesignreadProduct design, design system, and research.
EngineeringreadPlatform, API, and infrastructure work.
MarketingreadGrowth, content, and launches.
OrbitreadTask management for people and agents, with workspace-scoped OAuth.
active_cyclereadReturn the sprint this workspace is currently running, or null when none is open.
add_commentwritePost a markdown comment on an issue, optionally as a reply to another comment.
add_team_memberwritePut a workspace member on a team so they see its issues and sprints.
archive_docreadArchive a document so it leaves the sidebar and the default listings. The content is kept.
archive_issuereadArchive an issue so it leaves the board and the default lists. Use delete_issue to remove it for good.
archive_projectreadArchive a project so it leaves the active lists. Its issues are kept.
attach_filewriteUpload a file and attach it to an issue, a comment, a doc or a project. Returns a url you can put in markdown, for example ![name](url).
bulk_update_issueswriteUpdate multiple issues at once (up to 50). Changes state, assignee, labels, priority, sprint (cycle) or project across all issues in one atomic operation.
comment_on_docwriteAdd a Markdown comment to a document.
complete_cyclereadClose a sprint. Whatever is unfinished rolls into the next sprint rather than being left behind.
copy_branch_namereadReturn the git branch name Orbit uses for an issue, in the form handle/eng-42-short-title.
create_cyclewriteOpen a new sprint (cycle) for a team over a date range. Send neither date and the server appends a one week sprint straight after the last one the team has.
create_docwriteCreate a document with a Markdown body or a self-contained HTML page. File it under a collection, attach it to a project, or nest it under a parent document. A document lives in a collection or in a project, never both.
create_doc_collectionwriteCreate a folder that documents can be filed under.
create_issuewriteCreate an issue on a team. The workflow state defaults to the team first unstarted state. Returns the new issue with its identifier such as
create_labelwriteCreate a label that can be applied to issues. Pass a team to keep the label on that team only, otherwise it is available across the workspace.
create_milestonewriteAdd a milestone to a project so work can be grouped towards a date.
create_projectwriteCreate a project and optionally attach it to one or more teams. Requires a role that can manage projects.
create_statewriteAdd a status to a team board. The category drives what the product infers from it, so pick the one that matches the meaning. The new status lands at the end; use reorder_states to place it.
create_sub_issueswriteCreate up to 50 sub-issues under a parent issue in one transaction. Returns the created identifiers in order.
create_teamwriteCreate a team with its own issue prefix, default workflow states and first sprint.
cycle_progressreadReturn scope, started, completed and cancelled counts for a sprint, the same totals in points, what was added or removed while it ran, and a day by day burn up series carrying both the scope and the completed work.
delete_commentdestructiveRemove a comment from an issue.
delete_docdestructiveDelete a document permanently. Pages nested under it are lifted to its own place rather than deleted. Use archive_doc to hide a document instead of destroying it.
delete_doc_collectiondestructiveDelete a folder. The documents inside stay in the workspace but lose their collection link unless you reassign them to another collection.
delete_doc_commentdestructiveRemove a comment from a document.
delete_issuedestructivePermanently delete an issue and everything attached to it. This cannot be undone; prefer archive_issue.
delete_labeldestructiveRemove a label from the workspace and from every issue carrying it.
delete_milestonedestructiveRemove a milestone. Its issues survive but lose the milestone link.
delete_projectdestructivePermanently delete a project. Its issues survive but lose their project link. Prefer archive_project.
delete_sprintdestructiveRemove a sprint. Its issues survive and fall back to no sprint, which is what descoping a cancelled sprint needs.
delete_statedestructiveRemove a status from a team board. A status that still holds issues is refused unless moveTo names another status on the same team to carry them.
delete_viewdestructiveRemove a saved view.
edit_commentwriteRewrite the body of a comment this user wrote on an issue.
edit_doc_commentwriteRewrite the body of a comment this user wrote on a document.
get_analytics_overviewreadRetrieve a high-level analytics overview of the workspace. Use this to answer questions about throughput, median cycle time, blocked work, and current WIP. You can filter the time range and choose to measure by issues or points.
get_docreadReturn a document with its full body. A markdown document returns Markdown, an html document returns the whole HTML page. The kind field says which.
get_issuereadFetch one issue by identifier such as
get_mereadReturn the Orbit user, workspace, role and teams authorized by the OAuth grant. Call this first to learn which teams you may write to.
get_workspace_instructionsreadReturn the current workspace guidance for connected agents. This is advisory context, not a permission boundary.
invite_memberwriteCreate a pending workspace invitation for an email address. This tool does not send an invitation email. Requires a role that can invite members. Only admins can invite admins.
link_github_repositoryreadAssociate a connected repository with a project, or with the whole workspace when no project is given. A project may have many repositories and a repository may serve many projects. Associating also starts watching the repository, which is what lets its pull request and check events reach Orbit.
list_attachmentsreadFiles attached to one issue, comment, doc or project. Use list_issue_attachments for an issue, since that one also covers files attached to its comments. This is for docs and projects.
list_cycleswriteList the sprints of this workspace in number order.
list_doc_collectionsreadReturn the folders documents can be filed under, with how many documents each holds.
list_doc_commentsreadReturn the comment thread on a document, oldest first.
list_docswriteList the documents this user can read, in the order they sit in the sidebar, or by relevance when you pass a query. Filter by a project, by a collection, or to the documents in no collection at all.
list_issue_attachmentsreadEvery file attached to an issue or to a comment on it, oldest first. Call this before you answer a thread that refers to a document, a screenshot or an export, so you work from what was actually attached rather than guessing from the filename.
list_issue_commentsreadReturn the comment thread on an issue, oldest first. Read this before replying, so you answer what was actually asked and do not repeat a reply you already posted.
list_labelsreadList the labels available in the workspace, optionally narrowed to the ones a team can use.
list_membersreadList workspace membership with each person role, which is what decides what they may do.
list_milestoneswriteList the milestones on a project in order.
list_my_issuesreadList issues assigned to the caller or awaiting their review, most recently updated first. Narrow with a state category such as
list_notificationsreadYour inbox: mentions, assignments, replies and state changes addressed to you. This is how you find work someone has handed you by name. Orbit never notifies you about your own actions, so nothing here was written by you.
list_project_milestonesreadReturn the milestones on a project with their target dates.
list_projectsreadList the projects in the workspace with their status and health.
list_stateswriteList the workflow states of one team, in board order. Use a state name from this list when creating or moving an issue.
list_teamsreadList the teams in the workspace that the caller can see. Each team has a key such as
list_usersreadList the people in the workspace. Use a name, handle or email from this list wherever a tool asks for a user.
list_viewsreadReturn the saved issue views this user can open, each with the filter state it stores. Copy that shape when creating or updating a view.
mark_issue_duplicatereadMark an issue as a duplicate of another issue. Moves the duplicate issue to the team canceled state, records the duplicate_of relation, and transfers subscribers to the survivor issue.
mark_notification_readreadMark your own notifications read once you have acted on them, so they leave your unread queue. Mark a notification read only after the work it describes is done or handed on, never on first sight.
move_docwriteFile a document under a collection, nest it under a parent, attach it to a project, or order it against its siblings. One call for what dragging it in the sidebar does.
move_issuewriteMove an issue to another workflow state or team, and optionally place it between two issues in the column. This is the tool to use to change status.
move_to_cyclewritePut an issue into a sprint, or pass null to take it out of the sprint it is in. The sprint must belong to the issue team.
project_progressreadReturn the issue counts for a project, in total and per milestone, so you can report how far along it is.
read_attachmentreadReturn the contents of a file attached to an issue, a comment, a doc or a project. Text-like files come back as text; anything else comes back base64 encoded. Large files are truncated, and the response says so.
remove_memberdestructiveRemove a member from the workspace entirely. Their issues can be reassigned to somebody else in the same call.
remove_relationdestructiveRemove a link between two issues. The inverse link on the other issue goes with it, so removing
remove_team_memberdestructiveTake a person off a team. They stay in the workspace.
reorder_milestoneswritePut the milestones of a project into the order given. The list has to name every milestone on the project exactly once, so read them with list_milestones first.
reorder_stateswriteSet the board order of a team. Name every status on the team exactly once, first column first. Call list_states to see the current order.
search_issuesreadSearch issues by free text and by team, project, cycle, assignee, participant, state, state category, label or parent. A participant is an assignee or reviewer. Returns a page of issues plus a cursor for the next page.
set_relationwriteLink two issues. The inverse link is written on the other issue automatically, so
start_cyclewriteStart a sprint that has not begun yet, by pulling its start date to now. A sprint has no separate started flag: it runs whenever the clock sits inside its dates and it has not been completed. The sprint keeps its planned end date, and the team has to have no sprint running.
unarchive_docreadBring an archived document back into the sidebar and the default listings.
unarchive_issuereadBring an archived issue back onto the board.
unlink_github_repositorydestructiveRemove the association between a repository and a project, or the workspace level association when no project is given. Removing the last association stops Orbit watching the repository, so its events are no longer processed.
update_cyclewriteRename a sprint or move its dates.
update_docwriteChange a document title, body, collection, parent, project or visibility. Only the fields you pass are touched. Filing a document under a collection detaches it from any project, and attaching it to a project unfiles it.
update_doc_collectionwriteChange the name or the icon of a folder.
update_issuewriteChange fields on an existing issue. Only the fields you pass are touched. Pass null to assignee, project or cycle to clear it, or an empty reviewers array to clear the reviewer list.
update_labelwriteRename a label, change its colour, or move it between a team and the whole workspace.
update_milestonewriteRename a milestone or move its target date.
update_projectwriteChange a project name, summary, status, health, lead or target dates. Only the fields you pass are touched.
update_statewriteRename a status, recolour it, or move it to another category. Changing the category re-derives the started, completed and canceled timestamps of every issue sitting in it.
update_teamwriteRename a team or change its description. The issue prefix cannot change.
update_viewwriteRename a saved view, change its layout or grouping, share it, or replace the filter it stores. Read the view first with list_views and send the whole filter state back, because a filter replaces the stored one rather than merging into it.
04

Trust audit

BLOCKgrade F · trust 51/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (4 observation(s))
Network
declared (5 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.env.example:8
DATABASE_URL=postgres://orbit:orbit@localhost:5434/orbit
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.env.example:9
# DIRECT_URL=postgres://orbit:orbit@localhost:5434/orbit
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.github/workflows/ci.yml:69
DATABASE_URL: postgres://orbit:orbit@localhost:5433/orbit
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.github/workflows/ci.yml:101
DATABASE_URL="postgres://orbit:orbit@localhost:5433/$db" bun run --filter '@orbit/db' push
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.github/workflows/ci.yml:126
DATABASE_URL: postgres://orbit:orbit@localhost:5433/orbit_from_migrations
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/web/tests/app/api/cron/analytics-snapshots/route.test.ts:7
const SECRET = 'an-analytics-cron-secret-that-is-long-enough';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/web/tests/app/api/cron/notifications/route.test.ts:5
const SECRET = 'a-notifications-cron-secret-that-is-long-enough';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/web/tests/app/api/cron/prune/route.test.ts:5
const SECRET = 'a-cron-secret-that-is-long-enough';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/web/tests/app/api/cron/sprint-rollover/route.test.ts:8
const secret = 'sprint-rollover-secret';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/web/tests/app/api/webhooks/github/route.test.ts:20
const SECRET = 'a-github-webhook-secret';
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
apps/web/tests/features/settings/deployment-guides.test.ts:122
const pem = '-----BEGIN PRIVATE KEY-----\nfixture\n-----END PRIVATE KEY-----';
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
docs/integrations.md:88
GITHUB_APP_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----"
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
packages/services/tests/backup/validate.test.ts:11
const TEST_TLS_KEY = `-----BEGIN PRIVATE KEY-----
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
apps/web/tests/app/api/integrations/slack/channels/route.test.ts:53
botToken: 'xoxb-channel-picker',
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
apps/web/tests/app/api/integrations/slack/route.test.ts:62
botToken: 'xoxb-workspace-secret',
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
apps/web/tests/app/api/integrations/slack/route.test.ts:173
authorization: 'Bearer xoxb-workspace-secret',
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
apps/web/tests/app/api/integrations/slack/route.test.ts:433
expect(authorizations).toEqual(['Bearer xoxb-workspace-secret']);
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
apps/web/tests/app/api/integrations/slack/route.test.ts:536
expect(request.headers.get('authorization')).toBe('Bearer xoxb-workspace-secret');
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
delete_comment, delete_doc, delete_doc_collection, delete_doc_comment, delete_issue, delete_label, delete_milestone, delete_project, delete_sprint, delete_state, delete_view, remove_member, remove_rel
Why it matters. 15 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
MEDIUMAuth / authz · mcp.remote_no_auth · CWE-287, CWE-862
streamable-http
Why it matters. a network transport with no auth environment variable found
Fix. require a token
LOWInventory / provenance · inv.hidden_file · CWE-1104
.coderabbit.yaml
.coderabbit.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.vercelignore
.vercelignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.suspicious_name · CWE-1104
packages/core/tests/content/doc-payload.test.ts
doc-payload.test.ts
Why it matters. member named after an attack tool
Fix. remove or justify
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/realtime/tests-preload.ts:2
import { resolveTestDatabaseUrl } from '../../scripts/test-env.ts';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/web/e2e/global-setup.ts:5
const repoRoot = resolve(import.meta.dirname, '../../..');

Gates applied: no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha 884ca9206734full audit observations/trust-audit/mcp-server/noveum__orbit.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-08884ca9206734BLOCKF51first audit
06

Questions

What is the orbit MCP server?

Free, open source, realtime task manager. Issues, boards, sprints, projects and docs that sync instantly. Keyboard-first, self-hostable, with an MCP server for AI agents. No pricing, ever.

What tools does orbit expose?

94 in total: 40 read-only, 39 that write, and 15 that can delete or overwrite (delete_comment, delete_doc, delete_doc_collection, delete_doc_comment, delete_issue). Every one is listed on this page with its risk.

Is orbit safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (51/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 15 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does orbit need?

No credential environment variables were found in its source, so it appears to need none.

How does orbit run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as @orbit/shared at 0.0.0.

How current is this page?

The grade is for one exact copy of the source (884ca9206734), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement