Atlas / MCP servers / spitfire-products / nexus-cortex

nexus-cortexBLOCK

mcp/spitfire-products/nexus-cortex

A headless, multi-provider AI agent harness — embed it as a library, script it from the CLI, or run it as a stateful agent server. One orchestrator drives every major LLM provider.

Verdict
BLOCK
Grade
F
Trust score
57 /100
Exposed tools
149 114r · 29w · 6d
Transport
streamable-http
License
Apache-2.0
Stars
0
01

Overview

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

A headless, multi-provider AI agent harness — embed it as a library, script it from the CLI, or run it as a stateful agent server.

[](https://www.npmjs.com/package/@nexus-cortex/cli) [](./LICENSE) [](https://nodejs.org)

Nexus Cortex is the engine underneath the agent — not another interactive terminal app, but the harness you build on. One orchestrator drives many models across many providers through a pluggable adapter layer, with sub-agents, MCP, sandboxed artifacts, a permission engine, context management, and append-only session history built in.

Run it three ways: as a library (import { CortexOrchestrator }), as a headless CLI (cortex "..."), or as a stateful HTTP agent server.

Release 1 is the headless harness — core, executors, server, cli. The interactive React/Ink terminal UIs (@nexus-cortex/tui) land in Release 2.
Driving it from your own agent harness? Cortex is built to run as an autonomous sub-agent that another agent configures and prompts headlessly — often more precisely than a human at a UI can. The bundled `cortex-subagent` skill is the operational formula: the three headless entry points, the config levers worth setting, how to write a self-contained autonomous brief, budgets, and orchestrator-side verification.

Quick Start

npm install -g nexus-cortex

That puts the cortex command on your PATH. Now give it one provider key — three ways, pick whichever fits:

# 1. Set a key in the global config file (created for you automatically)
cortex config set DEEPSEEK_API_KEY sk-...        # w
Read from source at commit c326587c44b3OBSERVED · 2026-10-12
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. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add types --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env ANTHROPIC_AUTH_METHOD=${ANTHROPIC_AUTH_METHOD} --env ANTHROPIC_AUTH_TOKEN=${ANTHROPIC_AUTH_TOKEN} --env CLAUDE_CODE_OAUTH_TOKEN=${CLAUDE_CODE_OAUTH_TOKEN} -- npx -y @nexus-cortex/[email protected]
claude-desktop
{
  "mcpServers": {
    "types": {
      "command": "npx",
      "args": [
        "-y",
        "@nexus-cortex/[email protected]"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
        "ANTHROPIC_AUTH_METHOD": "${ANTHROPIC_AUTH_METHOD}",
        "ANTHROPIC_AUTH_TOKEN": "${ANTHROPIC_AUTH_TOKEN}",
        "CLAUDE_CODE_OAUTH_TOKEN": "${CLAUDE_CODE_OAUTH_TOKEN}"
      }
    }
  }
}
03

Exposed tools (149)

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

ToolRiskDescription
AddonTool1readtest
AddonTool2readtest
AskForAdvicereadConsult a senior engineer for a hint when stuck.
AskUserQuestionreadPresent structured multiple-choice questions to the user. Use to gather preferences, clarify ambiguous instructions, get decisions on implementation choices, or offer direction options. Users can always select
BashwriteRun a shell command.
BashOutputreadRetrieve output from a running or completed background bash shell started with run_in_background: true. - Returns only NEW output since your last check (incremental reads) - Shows process status: Running or Exited with exit code - Use filter to search output with regex (e.g., filter:
CanonPullSessionreadMaterialize one canon-store session into the local session directory — the cross-harness
CodeExecutewriteExecute JavaScript code for token-efficient tool chaining. Only console.log() output enters the context window. Write code that calls multiple tools in sequence, processes results, and outputs only what matters. Top-level await supported.
ComplexToolreadA complex tool
ConfigureMcpServerwriteUpdate configuration for an existing MCP server (args, env, timeout, auto-start, etc.). Server will need to reconnect for changes to take effect.
CreateArtifactToolwriteCreate artifacts in ANY language with flexible execution - the ultimate workspace for self-development and validation. NOTE:
DisableMcpServerwriteDisable an MCP server by setting its status to disabled in MCP_CONFIG.md. This disconnects the server and removes its tools from availability.
Editwriteedit
EnableMcpServerwriteEnable an MCP server by adding it to MCP_CONFIG.md. This makes the server\
GetConversationSegmentreadRetrieve a specific segment of conversation history at different detail levels
GetMcpConfigreadGet current MCP configuration showing enabled servers, their settings, connection status, and available tools. Use this to see what MCP servers are currently configured.
GlobreadFind files matching a pattern. BEST PRACTICES: - Accept user
GrepwriteSearch for patterns in files using grep. SEARCH STRATEGY — start narrow, broaden only on zero results: 1. First grep: exact string, current directory, no flags. If matches appear, Read those files — do not keep searching. 2. Match file types to the project language. TypeScript repo → glob:
InitMcpConfigreadAnalyzes the current project and creates a tailored MCP_CONFIG.md with recommended MCP servers based on detected project characteristics (Node.js, Python, database, etc.)
KillShellwriteStop a running background bash shell by its ID. Use when a background process hangs, takes too long, or is no longer needed. The shell ID is the same bash_id returned by Bash with run_in_background: true.
ListAvailableMcpServersreadList all MCP servers available in the community registry with their descriptions, capabilities, and requirements. Use this to discover what tools are available to enable.
ListCompactionBoundariesreadList all compaction boundaries (conversation summaries) with IDs
ListSessionsreadList all available conversation sessions with metadata for discovery
LoadSessionreadLoad messages from a specific previous session to access full conversation context
MemoryRecallreadLoad a memory\
NotebookEditwriteEdit Jupyter notebook (.ipynb) cells. Supports replacing, inserting, or deleting cells. Read the notebook first to get cell IDs.
PRAgentwriteManage GitHub pull requests — review, create, list, and post reviews. MODES: - review: Fetch a PR
Readreadread
ReadFilereadRead a file from the filesystem
ReadImagereadLoad an image file (PNG, JPEG, GIF, or WebP) so you can SEE it. Vision-capable models get the image attached as visual input on the next message; text-only models get an exact transcription/description from the vision helper (the image is read on your behalf — pass \
RequestHistoricalContextreadRequest historical context using cheap helper model. Cost-effective for accessing archived context.
SandboxComponentTreereadReturn the React component hierarchy of a running sandbox (host elements collapsed, components only). Equivalent to a DevTools-style component-tree view. WHEN TO USE: understand a React artifact
SandboxRenderTracereadTrace React re-renders in a running sandbox — react-scan
SandboxTransferwriteRun a command in a remote sandbox (via MCP run_command) and save its stdout to a local file. Use for transferring PDFs, images, or data generated in the sandbox to the local filesystem.
SearchConversationHistoryreadSearch through conversation history including compacted boundaries
SearchMcpServersreadSearch for MCP servers by capability, keyword, or get recommendations for project type. Use this to find specific servers that meet your needs.
SearchToolsreadSearch the tool registry to discover available tools by name, description, or category. Use when you need a capability not in the current tool list — deferred tool loading means not all tools are immediately visible. Query forms: keyword search (
SkillwriteList or invoke specialized skills. Skills are text instruction files that provide step-by-step guidance for specific tasks. Use command
SlashCommandwriteExecute a registered slash command. Slash commands are user-defined or built-in shortcuts invoked with /name syntax. Only invoke commands that are listed as available — do not guess or invent command names.
TaskreadLaunch a sub-agent or list available agents. Use subagent_type
TestToolreadTest tool
TodoCreatewriteCreate a task for tracking multi-step work. All start as pending. Follow lifecycle: TodoUpdate(in_progress) -> work -> TodoUpdate(completed).
TodoListreadList all tasks with their current status. Use to check progress, find task IDs, or review what is pending.
TodoUpdatewriteUpdate task status or details by ID. Lifecycle: in_progress before work, completed after. Batch: comma-separated IDs (e.g.,
ValidToolreadok
WebFetchreadFetch and read content from a specific URL. Returns the page
WritedestructiveWrites a file to the local filesystem. This tool will overwrite the existing file if there is one at the provided path. If this is an existing file, you MUST use the Read tool first to read the file
WriteFilewriteWrite file contents
WriteFileContentsreadTest
aareadold desc
abort-testreadTest abort
already_snake_casereadTest
api-serverreadPersistent API server
authreadAuthenticate with GitHub
bad-categoryreadtest
bad-toolread
bashwriterun
browse-agentreadtest
calculatereadPerforms basic arithmetic calculations
cleardestructiveClear memory/context
code_executionwriteExecute Python code for calculations and analysis
code_interpreterwriteExecute Python code in a sandboxed container
complex_toolreadA complex tool
configreadOpen interactive configuration menu
connectreadConnect to IDE
custom-linterreadCustom code linter
deps-toolreadTool with dependencies
disablewriteDisable an MCP server
disconnectreadDisconnect from IDE
docker-sandbox-toolreadTool with Docker sandbox
editwriteEdit profile settings
enablewriteEnable an MCP server
explorereadtest agent
failing-toolreadTool with intentional error
file_searchreadRetrieve relevant chunks from pre-uploaded vector stores
format-testreadTest output formatting
general-purposereadComplex multi-step tasks, code generation, research — any task.
getreadGet configuration value
get_weatherreadGet weather for a location
gonereadd
grantreadGrant permission to a tool or path
hello-worldreadA simple hello world script
historyreadShow chat history
image_generationreadGenerate images from a text prompt
inforeadShow current session info
installwriteInstall an extension
js-calculatorreadSimple calculator
list_filesreadList files in a directory
local-sandbox-toolreadTool with local sandbox
loginreadLogin or switch authentication
logoutdestructiveClear authentication
mentorshipreadAI-to-AI mentorship system
metadata-toolreadTest metadata
metricsreadShow cache metrics
modelreadShow model usage statistics
multiline-toolreadTool with multiline code
newwriteStart a new chat session
nexus-browser__browsereadMCP tool
nexus-browser__wait_for_challenge_resolutionreadMCP tool
no-deps-toolreadTool without dependencies
no-tests-toolreadTool without tests
okread
persist-areadPersist A
persist-toolreadPersistent
persistent-toolreadPersistent tool
pickerreadOpen visual model selection dialog
py-calculatorreadPython calculator
py-json-toolreadJSON manipulation tool
readFileContentsreadRead file
read__filereadTest
read_filereadRead a file from the filesystem
read_file_v2readTest
removablereadWill be removed
reporeadConfigure repository settings
reportreadGenerate cache report
resetdestructiveReset all settings to benchmark-proven optimal defaults (preserves API keys)
resumereadResume from a checkpoint
revokedestructiveRevoke permission
search_historyreadSearch conversation history
sessionreadShow session statistics
setwriteInteractive browser, or /config set <key> <value> for direct set
setupwriteRun terminal setup wizard
showreadShow current directory
sim-monitorreadlong-running monitor
special-chars-toolreadTool with special characters
statusreadShow MCP server status
temp-areadTemp A
temp-toolreadTemporary
testreadtest
test-serverreadTest server for auth module
test-toolread
test_toolreadTest tool
test_tool_onereadFirst test tool for format validation
test_tool_tworeadSecond test tool for format validation
tested-toolreadTool with tests
timing-toolreadTest timing
tool_namereadInvalid tool
toolsreadShow tool usage statistics
uninstalldestructiveUninstall an extension
unique-toolreadFirst
unknown_toolreadUnknown server-side tool
updatewriteUpdate extensions
valid_tool_namereadValid tool
web-appreadInteractive web application
web_searchreadSearch the web for information
writeFilereadTest
write_file_contentswriteTest
xreadTest
x_searchreadSearch X (Twitter)
04

Trust audit

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

LayerWhat it checksResult
L0Provenance & inventoryWARN
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 (6 observation(s))
Network
declared (8 observation(s))
Shell
declared (6 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/core/src/orchestrator/HerdrSubAgentRunner.ts:257
const call = (args: string[], timeoutMs = EXEC_GRACE_MS) => exec(bin!, [...sessionArgs, ...args], { timeoutMs, env });
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHNetwork egress · net.env_exfil · CWE-200, CWE-319
packages/cli/bin/cortex.js:457
'.env' ... fetch(
Why it matters. reads secrets in the same file that sends data out
MEDIUMInventory / provenance · inv.binary · CWE-1104
packages/canon/src/canonCognition.ts
canonCognition.ts
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
packages/core/src/adapters/servedModelDrift.ts
servedModelDrift.ts
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
packages/core/src/orchestrator/APIClient.ts:3843
if (process.env.DEBUG === 'true') console.log(`[DEBUG APIClient SDK] Token usage: ${JSON.stringify(lastChunk.usageMetadata)}`);
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
packages/core/src/orchestrator/CortexOrchestrator.ts:7964
console.log(` Token reduction: ${currentTokens} -> ${newTokenCount} tokens (removed ${currentTokens - newTokenCount})`);
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
packages/cli/src/commands/autoresearch/loop.ts:100
'hallucinated APIs, contains unsafe operations or anything resembling a backdoor or exfiltration, ' +
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/core/src/config/__tests__/subscription-token-gate.test.ts:26
const API_KEY = 'sk-ant-api03-FAKE-KEY';
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
Write, clear, logout, reset, revoke, uninstall
Why it matters. 6 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.env.defaults
.env.defaults
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
packages/canon/src/canonArtifacts.ts:62
return crypto.createHash('sha1')
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
packages/cli/src/commands/autoresearch/repoResolve.ts:34
const key = createHash('sha1').update(value).digest('hex').slice(0, 16);
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
packages/core/src/utils/stateDir.ts:55
return createHash('sha1').update(projectPath).digest('hex').slice(0, 12);
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
packages/executors/src/implementations/addon/KeyframeDetector.ts:401
return crypto.createHash('md5').update(content).digest('hex');
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
packages/tui/src/commands/system-message/EditorLauncher.ts:158
return createHash('md5').update(content).digest('hex');
LOWInformation disclosure · disclose.log_secret · CWE-209, CWE-532
packages/core/src/adapters/__tests__/smoke/anthropic-prompt-caching-smoke.test.ts:274
console.log(`  - Token prefix: ${credential.token.slice(0, 15)}...`);
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/core/src/middleware/__tests__/permissions/FileOperationPolicy.test.ts:75
context.toolInput = { file_path: '/root/.ssh/id_rsa' };
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/cli/src/commands/artifact/list.ts:6
import { CortexClient } from '../../client/CortexClient.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/cli/src/commands/artifact/list.ts:7
import { ConfigManager } from '../../config/ConfigManager.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/cli/src/commands/artifact/list.ts:8
import { ThemeManager } from '../../themes/ThemeManager.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/cli/src/commands/artifact/restart.ts:6
import { CortexClient } from '../../client/CortexClient.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/cli/src/commands/artifact/restart.ts:7
import { ConfigManager } from '../../config/ConfigManager.js';
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/core/src/orchestrator/__tests__/streamAbortSettles.test.ts:34
api: { pattern: 'chat/completions', endpoint: `http://127.0.0.1:${port}/chat/completions`, apiKeyEnvVar: 'DEEPSEEK_API_KEY' },
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/executors/src/implementations/addon/__tests__/ReactSensesIntegration.test.ts:64
url = `http://127.0.0.1:${addr.port}`;
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@types/html-to-text, @types/ws, @changesets/cli, eslint, @eslint/js, typescript-eslint
Why it matters. 6 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha c326587c44b3full audit observations/trust-audit/mcp-server/spitfire-products__nexus-cortex.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-12c326587c44b3BLOCKF57first audit
06

Questions

What is the nexus-cortex MCP server?

A headless, multi-provider AI agent harness — embed it as a library, script it from the CLI, or run it as a stateful agent server. One orchestrator drives every major LLM provider.

What tools does nexus-cortex expose?

149 in total: 114 read-only, 29 that write, and 6 that can delete or overwrite (Write, clear, logout, reset, revoke). Every one is listed on this page with its risk.

Is nexus-cortex safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (57/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: 6 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does nexus-cortex need?

It reads ANTHROPIC_API_KEY, ANTHROPIC_AUTH_METHOD, ANTHROPIC_AUTH_TOKEN, CLAUDE_CODE_OAUTH_TOKEN, CLOUDFLARE_API_TOKEN, CORTEX_COMPACTION_THRESHOLD_TOKENS, CORTEX_COMPUTE_NUDGE_TOKENS, CORTEX_FRAME_AUTHOR, CORTEX_FRAME_AUTHOR_MODEL, CORTEX_FRAME_AUTHOR_WHEN, CORTEX_FRAME_KEY_GUARD and CORTEX_GEMINI_CACHE_MIN_TOKENS 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 nexus-cortex run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as @nexus-cortex/types at 4.124.73.

How current is this page?

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

Advertisement