← MCP servers · q00

Ouroboros

BLOCKgrade F · trust 33/100

Agent OS: the agent gets smarter on its own. We just hold the line: Interview-gated, staged evaluation, budgeted evolution loop. MCP server, 14 runtimes: Claude Code, Codex CLI, Gemini CLI, OpenCode, Copilot, Kiro and more.

agent osagentic aiai agentai coding agentclaude codeclicodexcoding agent

Overview

From the repository's own README, as read at the audited commit.

<!-- mcp-name: io.github.Q00/ouroboros --><p align="right">  <strong>English</strong> | <a href="./README.ko.md">한국어</a> | <a href="./README.zh-CN.md">简体中文</a></p><p align="center">  <br/>  ◯ ─────────── ◯  <br/><br/>  <img src="./docs/images/ouroboros.png" width="420" alt="Ouroboros">  <br/><br/>  <strong>O U R O B O R O S</strong>  <br/><br/>  ◯ ─────────── ◯  <br/></p><p align="center">  <strong>It gets smarter on its own. We just hold the line.</strong>  <br/>  <sub>Skip the prompt engineering. The agent runs, fails, and gets smarter every generation. The grading command and expected result never make it into the success contract we hand it.</sub>  <br/>  <sub>The <strong>Agent OS</strong> for replayable AI coding workflows</sub></p><p align="center">  <a href="https://github.com/Q00/ouroboros"><img src="https://img.shields.io/github/stars/Q00/ouroboros?color=yellow&logo=github&label=stars" alt="GitHub stars"></a>  <a href="https://pypi.org/project/ouroboros-ai/"><img src="https://img.shields.io/pypi/v/ouroboros-ai?color=blue" alt="PyPI"></a>  <a href="https://github.com/Q00/ouroboros/actions/workflows/test.yml"><img src="https://img.shields.io/github/actions/workflow/status/Q00/ouroboros/test.yml?branch=main" alt="Tests"></a>  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="License"></a>  <a href="https://github.com/sponsors/Q00"><img src="https://img.shields.io/github/sponsors/Q00?logo=githubsponsors&color=EA4AAA&label=sponsors" alt="GitHub Sponsors"></a></p><p align="center">  <a href="https://trendshift.io/repositories/26008?utm_source=repository-badge&utm_medium=badge&utm_campaign=badge-repository-26008" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/repositories/26008" alt="Q00%2Fouroboros | Trendshift" width="250" height="55"/></a></p><p align="center">  <a href="#quick-start">Quick Start</a> ·  <a href="#why-ouroboros">Why</a> ·  <a href="#what-you-get">Results</a> ·  <a href="#the-loo

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. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add habit-tracker-cli --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env CACHED_TEST_API_KEY=${CACHED_TEST_API_KEY} --env COPILOT_TOKEN=${COPILOT_TOKEN} --env GH_TOKEN=${GH_TOKEN} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "habit-tracker-cli": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
        "CACHED_TEST_API_KEY": "${CACHED_TEST_API_KEY}",
        "COPILOT_TOKEN": "${COPILOT_TOKEN}",
        "GH_TOKEN": "${GH_TOKEN}"
      }
    }
  }
}

Exposed tools (3) 3 read · 0 write · 0 destructive

ToolRiskDescription
identityreadReturn any JSON value unchanged.
identity-nullreadReturn JSON null unchanged.
inspect_payloadreadreturn payload

Details

Source
q00/ouroboros
npm
habit-tracker-cli@1.0.0
PyPI
ouroboros-ai
Transports
sse · stdio · streamable-http
Credentials it reads
ANTHROPIC_API_KEYCACHED_TEST_API_KEYCOPILOT_TOKENGH_TOKENGITHUB_TOKENGOOGLE_API_KEYOPENAI_API_KEYOPENROUTER_API_KEYOUROBOROS_POSTHOG_API_KEYSOME_VENDOR_API_KEY
License
MIT
Stars
5,930 · pushed 0d ago

Trust audit

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)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (9 observation(s))
Network
declared (11 observation(s))
Shell
declared (9 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
src/ouroboros/cli/runtime_activation.py:343
loaded = yaml.load(snapshot.contents.decode("utf-8"), Loader=_UniqueKeyLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/ouroboros/auto/seed_preflight.py:427
r"(?:command(?:\s+(?:--|-p|-v|-V))*\s+)?eval(?:\s|$)",
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/ouroboros/mcp/server/security.py:524
"eval(",
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/ouroboros/mcp/server/security.py:525
"exec(",
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/ouroboros/evaluation/artifact_collector.py:107
".netrc",
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/ouroboros/evaluation/artifact_collector.py:110
"id_rsa",
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/ouroboros/evaluation/artifact_collector.py:111
"id_ed25519",
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/ouroboros/evaluation/artifact_collector.py:112
"id_ecdsa",
Why it matters. touches a credential store
HIGHPrompt injection · prompt.hide_from_user · CWE-94, CWE-1427
skills/auto/SKILL.md:226
status), keep waiting. Do not tell the user to call job tools themselves.
Why it matters. asks the agent to act without the user's knowledge
HIGHPrompt injection · prompt.tool_poisoning · CWE-94, CWE-1427
docs/runtime-guides/omp.md:94
[--append-system-prompt <SYSTEM>] [--tools <TOOLS>] [--no-tools] <PROMPT>
Why it matters. a tool description carrying instructions to the agent
Fix. tool descriptions describe the tool; nothing else
HIGHPrompt injection · prompt.tool_poisoning · CWE-94, CWE-1427
docs/runtime-guides/pi.md:87
[--append-system-prompt <SYSTEM>] [--tools <TOOLS>] [--no-tools] <PROMPT>
Why it matters. a tool description carrying instructions to the agent
Fix. tool descriptions describe the tool; nothing else
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/ouroboros/auto/__init__.py:95
value = getattr(importlib.import_module(module_name), name)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/ouroboros/orchestrator/capabilities/__init__.py:116
_lateral_personas = importlib.import_module(f"{__name__}.lateral_personas")
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/ouroboros/orchestrator/capabilities/__init__.py:121
_pm_schemas = importlib.import_module(f"{__name__}.pm_schemas")
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/ouroboros/orchestrator/capabilities/__init__.py:249
_tool_specs = importlib.import_module(f"{__name__}.tool_specs")
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/ouroboros/orchestrator/capabilities/__init__.py:290
_interview_schemas = importlib.import_module(f"{__name__}.interview_schemas")
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/live-dsh-interview.cjs:19
const baseUrl = process.env.DSH_URL || 'http://127.0.0.1:3081';
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
tests/unit/core/test_security.py:82
assert validate_api_key_format("sk-ant-12345678901234567890", provider="anthropic") is True
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/unit/evolution/test_provider_usage.py:740
api_key = "cached-client-credential"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/unit/evolution/test_provider_usage.py:743
adapter = AnthropicAdapter(api_key="constructor-credential", max_retries=0)
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/unit/evolution/test_provider_usage.py:1919
secret = "test-secret-that-must-not-escape"
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
tests/unit/plugin/test_firewall.py:1660
"--token=ghp_thisIsClearlyASecretValue123456789",  # equals form
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
tests/unit/plugin/test_firewall_tool_call_dispatch.py:134
raw_token = "ghp_thisIsClearlyASecretValue123456789"
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
tests/unit/plugin/test_firewall_tool_call_dispatch.py:475
raw_github_token = "ghp_thisIsClearlyASecretValue123456789"
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
tests/unit/auto/test_state_provenance.py:35
"user_token": "xoxb-supersecret",

Gates applied: instruction_override, no_behavioural_pass.

Audited 2026-09-16 · audit v0.4.0 · source sha 6bd55d5c8f0c · full audit: observations/trust-audit/mcp-server/q00__ouroboros.json · Report an issue or request a re-scan

Audit history

DateSourceVerdictGradeScoreChange
2026-09-166bd55d5c8f0cBLOCKF33first audit

Alternatives

Other servers in the same categories, safer ones first.

Questions

What is the Ouroboros MCP server?

Agent OS: the agent gets smarter on its own. We just hold the line: Interview-gated, staged evaluation, budgeted evolution loop. MCP server, 14 runtimes: Claude Code, Codex CLI, Gemini CLI, OpenCode, Copilot, Kiro and more.

What tools does Ouroboros expose?

3 in total: 3 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is Ouroboros safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (33/100) and found 11 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does Ouroboros need?

It reads ANTHROPIC_API_KEY, CACHED_TEST_API_KEY, COPILOT_TOKEN, GH_TOKEN, GITHUB_TOKEN, GOOGLE_API_KEY, OPENAI_API_KEY, OPENROUTER_API_KEY, OUROBOROS_POSTHOG_API_KEY and SOME_VENDOR_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does Ouroboros run?

It speaks sse, stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as habit-tracker-cli at 1.0.0.

How current is this page?

The grade is for one exact copy of the source (6bd55d5c8f0c), read on 2026-09-16. The repository is watched and re-audited when it changes.

Provenance: OBSERVED · read 2026-09-16 · job trust-audit-2026-09-16