Atlas / MCP servers / 223n / mcp-server

mcp-serverBLOCK

mcp/223n/mcp-server

ローカルOllmaを参照、公開するMCPサーバー

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
13 11r · 2w · 0d
Transport
streamable-http
License
Apache-2.0
Stars
1
01

Overview

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

ローカルのOllamaをMCPサーバーとして公開し、Claudeから作業を任せられるようにするNode.jsのサーバーです。 公式のMCP TypeScript SDK v2で作っています。

入口は次の2つです。 どちらもMCPの2026-07-28版(server/discover)と2025年版(initialize)の両方に応答します。

構成

[ローカル]
Claude Code / Claude Desktop ──stdio──> docker exec ollama-mcp node stdio.ts ──> Ollama(ホストの11434番)

[リモート]
claude.ai ──HTTPS──> Cloudflare Access ──> Cloudflare Tunnel ──> 127.0.0.1:3000/mcp ──> Ollama

claude.aiとClaude Desktopのカスタムコネクタは、このPCではなくAnthropicのクラウドから接続します。 同じPCで使うだけなら、ローカル(stdio)の接続が確実です。 トンネルとAccessは要りません。

MCPのツール

Read from source at commit 988adba364f2OBSERVED · 2026-10-14
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. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add mcp-server --env GITHUB_MCP_TOKEN=${GITHUB_MCP_TOKEN} --env MCP_AUTH_TOKEN=${MCP_AUTH_TOKEN} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "GITHUB_MCP_TOKEN": "${GITHUB_MCP_TOKEN}",
        "MCP_AUTH_TOKEN": "${MCP_AUTH_TOKEN}"
      }
    }
  }
}
03

Exposed tools (13)

11 read · 2 write · 0 destructive.

ToolRiskDescription
git_clonereadClone a GitHub repository into ${cloneLabel()} on the machine that runs Ollama, so its files can be passed to the Ollama tools.
git_readreadRead the state of a cloned repository: status, log, diff, show, branches or remotes.
git_writewriteFetch, switch or create a branch, stage files, commit and push in a cloned repository.
github_readreadRead pull requests, issues, diffs, comments and check runs from GitHub for these owners: ${ownersLabel() ||
github_writewriteOpen a pull request, or comment on a pull request or issue.
list_filesreadList files and directories under ${fileRootsLabel()} on the machine that runs Ollama, so their paths can be passed to the \
ollama_chatreadDelegate a self-contained text task to a local LLM running on the user
ollama_explain_errorreadAsk the local LLM (default ${config.deepModel}) to analyse an error message or log and list likely causes with checks and fixes.
ollama_healthreadCheck that the local Ollama is reachable and show the server settings (default models, timeout, file access).
ollama_jobreadCheck a background job started with
ollama_list_modelsreadList the models installed in the local Ollama with size, quantization and context length.
ollama_review_codereadGet a second-opinion code review from the local LLM (default ${config.deepModel}).
read_filereadRead one file under ${fileRootsLabel()} on the machine that runs Ollama, without sending it to the local model.
04

Trust audit

BLOCKgrade D · trust 69/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 surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (5 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
none-found

Findings (20)

HIGHObfuscation / stealth · obf.rtl_override · CWE-506, CWE-94
src/tools/diff.ts:25
.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F--]/g, "");
LOWInventory / provenance · inv.hidden_file · CWE-1104
.markdownlint-cli2.jsonc
.markdownlint-cli2.jsonc
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.textlintignore
.textlintignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.textlintrc.js
.textlintrc.js
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
test/git.test.ts:323
".git-credentials",
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
test/helpers/server.ts:65
"app/.ssh/config": "Host github.com\n",
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
test/helpers/server.ts:66
"app/.ssh/known_hosts": "github.com ssh-rsa AAAA\n",
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
test/helpers/server.ts:67
"app/.kube/config": "apiVersion: v1\n",
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
test/sensitive.test.ts:14
"deploy/.git-credentials",
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/files.test.ts:63
["..で外へ出る", () => `${root}/app/../../outside.txt`, /outside the allowed roots/],
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/git.test.ts:77
["..", "../../etc", /must be "owner\/repo"/],
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/git.test.ts:228
for (const value of ["../outside.txt", "a/../../b", "..\\windows"]) {
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/review.test.ts:239
await assert.rejects(ollamaReviewCode({ git_diff: { repo: "../../etc" } }), /must be "owner\/repo"/);
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
.github/workflows/ci.yml:217
if docker exec "${CONTAINER}" wget -qO- http://127.0.0.1:3000/healthz; then
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
.github/workflows/ci.yml:222
docker exec "${CONTAINER}" wget -qO- http://127.0.0.1:3000/healthz
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
.github/workflows/ci.yml:249
http://127.0.0.1:3000/mcp)
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
CLAUDE.md:115
- 変えたあとは`docker compose up -d --build`で作り直し、`curl.exe http://127.0.0.1:3000/healthz`と、stdioの`initialize`の応答を確かめます
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:184
curl.exe http://127.0.0.1:3000/healthz
LOWObfuscation / stealth · obf.rtl_override · CWE-506, CWE-94
test/review.test.ts:178
"+const ok = true;",
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/express, @modelcontextprotocol/node, @modelcontextprotocol/server, express, express-rate-limit, zod, @223n/lint-config-ja, @modelcontextprotocol/client
Why it matters. 13 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass.

Audited 2026-10-14 · audit v0.4.1 · source sha 988adba364f2full audit observations/trust-audit/mcp-server/223n__mcp-server.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-14988adba364f2BLOCKD69first audit
06

Questions

What is the mcp-server MCP server?

ローカルOllmaを参照、公開するMCPサーバー

What tools does mcp-server expose?

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

Is mcp-server safe to connect to an agent?

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

What credentials does mcp-server need?

It reads GITHUB_MCP_TOKEN and MCP_AUTH_TOKEN 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 mcp-server run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as mcp-server at 2.3.0.

How current is this page?

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

Advertisement