Atlas / MCP servers / aotter / mantle

mantleBLOCK

mcp/aotter/mantle

AotterMantle SDK: agent-native CMS runtime, manifests, admin UI, and Cloudflare adapter.

Verdict
BLOCK
Grade
F
Trust score
47 /100
Exposed tools
3 3r · 0w · 0d
Transport
—
License
Apache-2.0
Stars
5
01

Overview

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

Mantle

Be the dungeon master. Don’t code every corridor.

Schema. View. Procedure. Trigger. Four atoms from which your world takes shape. Speak it in plain YAML, and the dungeon wakes—whole, lit from within, and yours to command.

Features · Admin · Get started · Documentation · Examples

Mantle is an embeddable applicatio

Read from source at commit 85f770c787e1OBSERVED · 2026-10-11
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 mantle --env BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET} -- npx -y @aotter/[email protected]
claude-desktop
{
  "mcpServers": {
    "mantle": {
      "command": "npx",
      "args": [
        "-y",
        "@aotter/[email protected]"
      ],
      "env": {
        "BETTER_AUTH_SECRET": "${BETTER_AUTH_SECRET}"
      }
    }
  }
}
03

Exposed tools (3)

3 read · 0 write · 0 destructive.

ToolRiskDescription
admin_get_contextreadRead the current Admin page and available staff tools. Call before navigating or changing data.
admin_navigatereadNavigate to a same-origin Admin page. Use /admin/c/{collection}, /admin/c/{collection}/{id}, /admin/views/{view}, /admin/media or a standard Admin page. This only changes the displayed page.
query_view_reportreadCanonical staff report description
04

Trust audit

BLOCKgrade F · trust 47/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 (5 observation(s))
Network
none-observed
Shell
declared (5 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

CRITICALHard-coded secrets · secret.private_key · CWE-798, CWE-321
packages/mantle/src/auth/appleClientSecret.ts:62
* (`-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----`)
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
packages/mantle-ui/admin/src/app/i18n.ts:4489
"common.signedIn": "وارد شدهاید",
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
packages/mantle-ui/admin/src/app/i18n.ts:4497
"oauth.connectedApps": "اتصالهای MCP",
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
packages/mantle-ui/admin/src/app/i18n.ts:4500
"oauth.consent.body": "{client} میتواند از طریق MCP از ابزارهای مدیریت این سایت استفاده کند. آنچه میتواند ببیند یا تغییر دهد همچنان به مجوزهای حساب شما محدود است.",
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
packages/mantle-ui/admin/src/app/i18n.ts:4506
"oauth.apps.body": "این کلاینتهای MCP میتوانند از ابزارهای مدیریت سایت استفاده کنند. هر عملیات همچنان بر اساس مجوزهای فعلی حساب شما بررسی میشود.",
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
packages/mantle-ui/admin/src/app/i18n.ts:4514
"nav.docs": "رابطها",
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.github/workflows/ci.yml:34
MANTLE_PG_URL: postgres://mantle:mantle@localhost:5432/mantle
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.github/workflows/release.yml:166
MANTLE_PG_URL: postgres://mantle:mantle@localhost:5432/mantle
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.github/workflows/release.yml:172
MANTLE_PG_URL: postgres://mantle:mantle@localhost:5432/mantle
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
packages/mantle/test/auth/appleClientSecret.test.ts:11
const PEM_HEADER = "-----BEGIN PRIVATE KEY-----";
LOWInventory / provenance · inv.hidden_file · CWE-1104
docs/examples/reference-service/.dev.vars.example
.dev.vars.example
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
skills/.keep
.keep
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/mantle/test/auth/sqliteFixture.ts:23
all: async () => { const { rows, changes, lastRowId } = exec(sql, binds); return { results: rows, success: true, meta: { changes, last_row_id: lastRowId } }; },
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/mantle/test/auth/sqliteFixture.ts:34
const driver: DatabaseDriver = { batch: async (stmts) => tx(() => stmts.map((s) => exec(s.sql, s.binds))) };
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/mantle-ui/admin/src/features/auth/auth-views.tsx:16
import { usePreferences } from "../../app/preferences";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/mantle-ui/admin/src/features/auth/auth-views.tsx:17
import { t } from "../../app/i18n";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/mantle-ui/admin/src/features/auth/auth-views.tsx:18
import { authMethodsQueryOptions } from "../../lib/queries";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/mantle-ui/admin/src/features/auth/auth-views.tsx:19
import type { AuthMethodInfo } from "../../lib/types";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/mantle-ui/admin/src/features/auth/auth-views.tsx:20
import { signOut } from "../../lib/auth";
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/examples/commerce-inventory.md:454
curl -sS -X POST http://127.0.0.1:8787/api/commerce/orders \
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/examples/commerce-inventory.md:467
with `curl 'http://127.0.0.1:8787/__scheduled?cron=*/5+*+*+*+*'` under
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/examples/commerce.md:216
curl -sS 'http://127.0.0.1:8787/api/views/public-products?limit=20'
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/examples/commerce.md:218
curl -sS -X POST http://127.0.0.1:8787/api/commerce/orders \
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/examples/guarded-api.md:200
curl -sS http://127.0.0.1:8787/api/views/public-catalog
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
packages/mantle/src/auth/appleClientSecret.ts:159
const bin = atob(b64);

Gates applied: critical_finding, no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 85f770c787e1full audit observations/trust-audit/mcp-server/aotter__mantle.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-1185f770c787e1BLOCKF47first audit
06

Questions

What is the mantle MCP server?

AotterMantle SDK: agent-native CMS runtime, manifests, admin UI, and Cloudflare adapter.

What tools does mantle 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 mantle safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (47/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 mantle need?

It reads BETTER_AUTH_SECRET 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 current is this page?

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

Advertisement