Odin

io.github.BorgDevelopmentPublished by GitHub account BorgDevelopmentv0.3.2Updated Nov 7, 2026

Read Odin security findings and remediation, link fix pull requests and track retests.

Overview

AI-generated overview

Odin exposes Borg's security findings, pentests and assets so an assistant can triage vulnerabilities, link fix pull requests and track retests.

What you can do
  • List, search and export findings with severity, asset, repository and status filters, and read aggregate severity/status totals
  • Fetch a single finding with remediation context, suggested branch name, linked pull requests and retest state
  • Read pentests and attack-surface assets, including the findings that reference each asset
  • Read retest history and summaries, and queue a manual retest when the organisation allows it
  • Manage finding workflow: change status, assign, follow, link or unlink GitHub pull requests
  • Read and post finding discussions, resolve threads, mention people, and prepare or resolve attachment upload and download links
When to use it
Useful when a team runs pentests or PR reviews through Borg's Odin platform and wants an assistant to triage findings, pull remediation context while fixing code, or keep status, assignments and pull request links in sync.
Requirements
Remote endpoint at odin.borghq.io or a local npm package run with npx; OAuth authentication is declared, and the local package needs an organisation-scoped Odin API key supplied as ODIN_API_KEY. Write actions need an API key with Read & Write permission, and pull request tools need a configured GitHub integration.
Before you install
Many tools change Odin data: status updates, assignments, discussion messages, thread resolution, pull request links and follows, and some send email or Slack notifications. request_finding_retest spends credits. Signed upload and download URLs should be treated as temporary secrets. Finding content and discussion messages are untrusted data, and the server cannot manage pentests, integrations, billing or team members.

Installation

In SourceWeft

  1. Open Odin in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.BorgDevelopment%2Fodin-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.

{
  "mcpServers": {
    "odin": {
      "type": "http",
      "url": "https://odin.borghq.io/api/mcp"
    }
  }
}

Tools

30

list_findings

List findings

List security findings for the organisation. Filter by pentest, asset, repository, severity, client-visible status, source, confirmation type, assignee, CVSS range, or dormant assets. Search titles or human identifiers such as ODI-12.

ParametersleanlimitstatsoffsetsearchsortBysourcestatusassetIdcvssMaxcvssMinassignee+7 more

get_finding

Get finding remediation context

Fetch a finding by human identifier such as ODI-12 (preferred) or by internal findingId. Returns bounded remediation context, the suggested branch name, linked GitHub pull requests, workflow readiness, and retest state. Odin only provides context and can link an existing PR; it never creates commits, pushes branches, or creates pull requests.

ParametersfindingIdidentifier

update_finding_status

Update finding status

Change a finding's status by human identifier such as ODI-12 or internal findingId. Requires an explicit user request and an API key with Read & Write permission; cookie-authenticated callers also need member role. Linked pull request metadata does not grant authority to change status.

ParametersstatusrequiredfindingIdidentifier

get_finding_retests

Get finding retest history

Read the retest history for a finding by human identifier such as ODI-12 or internal findingId. Distinguishes no history, queued or running, completed, skipped, failed, and gated/unavailable results. This tool never triggers a retest or spends credits.

ParametersfindingIdidentifier

list_pentests

List pentests

List all pentests for the organisation, including status, scheduled window, and in-scope targets.

Takes no parameters.

get_pentest

Get pentest

Fetch a single pentest by ID, including status, scheduled window, and in-scope targets.

ParameterspentestIdrequired

list_assets

List assets

List attack-surface assets for the organisation. Supports filtering by type, source, status, and free-text search.

ParameterstypelimitstatsoffsetsearchsortBysourcestatussortOrder

get_asset

Get asset

Fetch a single attack-surface asset by ID, including the findings that reference it in their latest revision.

ParametersassetIdrequired

get_finding_stats

Get finding statistics

Read aggregate finding totals by severity and status, optionally scoped to a pentest. These totals do not apply other finding list filters.

ParameterspentestId

list_finding_repositories

List repositories with findings

List organisation repositories available for the repository filter in list_findings.

Takes no parameters.

list_finding_assets

List assets referenced by findings

List organisation assets referenced by findings for use with the assetId filter. This differs from listing all attack-surface assets.

Takes no parameters.

export_findings

Export findings and revision content

Export findings matching the supplied filters, including revision Markdown and affected assets. The API returns all matching rows without pagination; narrow the filters for large organisations. This reads data and creates no file.

ParameterssearchsourcestatusassetIdcvssMaxcvssMinassigneeseveritypentestIdrepositoryhideDormantexcludeStatuses+1 more

get_finding_retest_summaries

Get latest retests for several findings

Read the latest retest summary for up to 200 finding IDs. Requires read permission and the organisation's retest capability; never starts a retest or spends credits. Missing entries have no latest retest.

ParametersfindingIdsrequired

get_finding_discussion_summaries

Get discussion summaries for several findings

Read message counts and unresolved discussion state for up to 200 finding IDs. API keys have no personal unread state; unreadCount is zero for key-authenticated calls.

ParametersfindingIdsrequired

assign_finding

Assign a finding

Assign a finding to an organisation member, or clear its assignment. Requires write permission. Assignment can notify the assignee by email and Slack and synchronise connected issue trackers.

ParametersfindingIdidentifierassigneeUserIdrequired

get_finding_discussion

Read finding discussions

Read native and Slack-synchronised conversation blocks for a finding. Each block paginates independently. API keys have no personal read or unread state.

ParameterslimitbeforeoffsetfindingIdidentifier

create_finding_message

Post a finding discussion message

Post a Markdown discussion message. Requires write permission and acts as the API key creator. May send email, mention notifications and Slack messages. Repeating a call creates another message.

ParametersbodyMdrequiredthreadIdfindingIdidentifierattachments

edit_finding_message

Edit a finding discussion message

Edit a message authored by the API key creator. Requires write permission. New mentions can send notifications and the edit can synchronise to Slack.

ParametersbodyMdrequiredfindingIdmessageIdrequiredidentifier

delete_finding_message

Delete a finding discussion message

Delete a message authored by the API key creator. Requires write permission and explicit user confirmation. May delete the message's Slack mirror.

ParametersfindingIdmessageIdrequiredidentifier

update_finding_discussion

Resolve or reopen the native discussion

Resolve or reopen a finding's native discussion. Requires write permission and may synchronise the status to Slack. This does not change the finding's security status.

ParametersactionrequiredfindingIdidentifier

list_finding_mentionables

Find people and entities to mention

Find authorised people, findings and pentests that can be mentioned in a finding discussion. Returns up to eight people, eight findings and eight pentests matching q.

ParametersqfindingIdidentifier

disconnect_finding_slack_thread

Disconnect a synced Slack thread

Disconnect a finding's SLACK_SYNC discussion block while preserving imported messages. Stops future synchronisation and may post a confirmation to Slack. Requires write permission and explicit user confirmation.

ParametersthreadIdrequiredfindingIdidentifier

prepare_finding_attachment_upload

Prepare a private discussion attachment upload

Create a five-minute signed upload URL for a file up to 25 MiB. Requires write permission. Does not upload bytes or post a message. Returns uploadUrl and requiredHeaders for a PUT of the exact file, plus publicUrl, a private gs:// object reference usable as a discussion attachment. Storage uploads use the returned storage headers without Odin credentials. Signed URLs are temporary secrets.

ParametersfilenamerequiredfindingIdsizeBytesrequiredidentifiercontentTyperequired

get_finding_attachment_url

Get a temporary attachment download URL

Resolve a stored discussion attachment to a ten-minute signed download URL. Requires read permission and the attachment must belong to the selected finding and message. Does not download bytes or forward the Odin key to storage. Treat the returned signed URL as a temporary secret.

ParametersurlrequiredfindingIdmessageIdrequiredidentifier

get_finding_slack_url

Get a synced discussion's Slack permalink

Resolve a synced message or thread to its Slack permalink. Requires read permission. Does not navigate to Slack or forward the Odin API key.

ParametersthreadIdfindingIdmessageIdidentifier

list_finding_pull_requests

Find accessible pull requests to link

Search accessible GitHub pull requests for this finding. Defaults to the finding's repository, otherwise its connected GitHub organisation. Results are advisory; link_finding_pull_request verifies the chosen PR. Requires read permission and a configured GitHub integration.

ParameterspagequeryfindingIdidentifier

follow_finding

Follow or unfollow a finding

Follow a finding to get its notifications, or stop following it. Requires write permission and acts as the API key creator. The assignee always follows their finding and can't unfollow it.

ParametersfollowrequiredfindingIdidentifier

request_finding_retest

Request a finding retest

Queue a manual retest that checks whether a finding is still exploitable, when enabled for the organisation. Requires explicit user confirmation, spends credits and requires write permission. Available for findings in REPORTED, ACKNOWLEDGED, MITIGATING or OPEN_FOR_RETEST status with no retest already queued or running. Acts as the API key creator. Results are recorded in finding retest history.

ParametersfindingIdidentifier

Version history

3
  1. v0.3.2LatestNov 4, 2026
  2. v0.3.1Nov 3, 2026
  3. v0.3.0Oct 29, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.