tentra (rdanieli/tentra-mcp) is an MCP server listed on the M8ven Trust Index. It scores 54 out of 100, grade D. It declares 36 tools. No publisher has claimed this listing.

D
Caution
54/100

tentra

Memory for AI coding agents. Persistent code graph + AI architecture diagrams. 32 MCP tools

Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

Code Verified⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

rdanieli

Source: Glama

Is this your MCP?

Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
🚨
Secret credentials may flow to a network call
1 flow detected: TENTRA_API_KEY. We can’t prove the destination matches the brand the credential belongs to.
🚨
Known vulnerabilities in dependencies: 1 critical, 5 high
Affects packages this MCP installs at runtime. Upgrade or remove the affected dependency.
🔐
You'll be asked for 1 credential: TENTRA_API_KEY
These are read from process.env at runtime. Make sure you trust where they’ll be sent.
// tools this server exposes36 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

create_architecture

Create a new, versioned architecture diagram from a set of services, connections, and (optionally) external actors, and return a shareable web URL. Use instead of describing an architecture in chat: whenever the user asks to design, plan, sketch, or document any system/feature/integration, call thi

update_architecture

Mutate an existing architecture — bump its version, snapshot the prior state as a version record, and replace whichever top-level fields you pass. Use instead of create_architecture whenever you already have an architecture id in context from a previous call, list_architectures, or the URL. Unlike

get_architecture

Fetch ONE architecture by ID with the full services + connections + flows graph inline. Use instead of list_architectures when you already know the ID and need the contents (e.g. before calling update_architecture, or to re-explain an existing diagram). list_architectures returns IDs + names only f

list_architectures

List every saved architecture in this workspace as a lightweight summary (id + name + version + createdAt + URL), newest first. Use for BROWSING / DISCOVERY — "what have I designed already?", "find an architecture named X". Unlike get_architecture, this does NOT return services or connections; once

analyze_codebase

Scan a local monorepo / project directory, auto-detect its services (from package.json, docker-compose, pom.xml, go.mod, Python configs), infer their connections (from deps, imports, env vars, docker depends_on), and materialize the result as a new Tentra architecture diagram in one shot. Use when

lint_architecture

Run 8 architecture-quality rules against a saved diagram and return a severity-tagged list of issues (errors / warnings / info). Rules covered: orphan_node, duplicate_connection, dangling_connection (references non-existent service), naming_convention (snake_case IDs), god_service (>6 connections),

sync_architecture

Diff a saved Tentra architecture against the current state of a local codebase and return a drift report: services added / removed / changed, connections added / removed, plus a 0–100 accuracy score. Use when the user asks "is my diagram still accurate?", "what's drifted?", or after significant ref

export_architecture

Render a saved architecture as runnable code scaffolding, Mermaid, docker-compose, or an ADR markdown document and either stream it back as text or write it to disk. Use when the user asks to "scaffold / generate / export / materialize" a diagram. Text formats (mermaid, markdown-adr, docker-compose

create_flow

Append an ordered step-by-step walkthrough (a "flow") to an existing architecture — e.g. a checkout request path, a data pipeline, or a failure-recovery procedure. The flow is rendered as an animated sequence on the canvas that highlights services and edges as the user steps through it. Use wheneve

index_code

Walk a local repo, extract symbols + call/import/reference edges via Tree-sitter (TypeScript, JavaScript, Python, Go, Java, Rust), and upload them to Tentra as a new immutable snapshot. This is what turns a raw checkout into a queryable code graph. WRITE PATH, LONG-RUNNING (seconds on small repos,

index_code_continue

Drive the tier-2 indexing loop forward: check a job's progress and either mark it done (when every file has been processed) or return the remaining file count so the agent knows it should send another batch of record_semantic_node calls. Use ONLY after index_code with tier="tier2" or tier="both" re

record_semantic_node

Persist ONE agent-inferred semantic annotation (a one-sentence purpose + domain tags + confidence + optional semantic role) for a single file OR single symbol in an indexing job, and advance that job's progress cursor by 1. This is the write side of tier-2 indexing: after index_code (tier2/both) re

get_index_job

Read-only status lookup for an indexing job: tier, status, snapshotId, totalFiles, processedFiles, lastBatchCursor, createdAt, completedAt. Use when you need to INSPECT a job without advancing it — e.g. to report progress to the user or to decide whether a previously-started job is still in flight.

query_symbols

Search the indexed code graph for symbols (functions, classes, methods, interfaces, types, variables) by name or qualified name. The structural-search entry point: returns resolved symbol IDs (with fanIn/fanOut ranking) that every other read-path tool accepts — grep returns text matches, query_symbo

find_references

Return every resolved caller / importer / inheritor of a single symbol from the code graph — the refactor-safety tool. Use before renaming or deleting a symbol to see exactly who depends on it. Unlike query_symbols (which takes a NAME and returns candidate symbols), find_references takes a KNOWN sy

safe_rename

Return a structured PATCH PLAN for renaming a symbol — definition site + every call site with exact file paths and line ranges — so the calling agent can apply the rewrite with its own Edit/MultiEdit tools. The canonical "rename without breaking hidden callers" tool. Unlike find_references (which o

explain_codebase

Produce an agent-ready narrative walkthrough of a whole repo — "what is this codebase?" answered in a single tool call from the indexed code graph. The onboarding tour: Start here / Structure / Architectural hotspots / Domains / Decisions / Contracts / Snapshot info, all assembled from data we alrea

get_symbol_neighbors

Breadth-first traverse the code graph starting from one symbol to return its local neighborhood: what it calls, what calls it, what it imports, inheritance / implementation relationships. Answers "how does this work?" structurally — grep finds the symbol; get_symbol_neighbors tells you what it actua

get_service_code_graph

Return the full code subgraph that belongs to ONE Tentra canvas service: every file mapped to that service, all the symbols in those files, and the edges leaving those symbols (including cross-service edges). Use when the user has an architecture diagram and asks "what code is in the payment_servic

explain_code_path

Compute the SHORTEST call/import/reference chain between two given symbols in a snapshot, and annotate each intermediate hop with its record_semantic_node purpose (when available). Answers "how does X reach Y?" / "is A actually connected to B?". Unlike get_symbol_neighbors (which explores around ON

find_similar_code

Run a cosine-similarity search over agent-generated embeddings stored via record_embedding. Pass a pre-computed query_vector (you must embed your text first with your own embedding capability — this tool does NOT embed for you) and optionally restrict by entity_type or snapshot_id. Returns the most

record_embedding

Persist ONE pre-computed embedding vector for a file or symbol so it becomes searchable via find_similar_code. You must produce the vector yourself (the agent embeds the source_text with whatever model it has access to) — Tentra stores vector + source_text + model identifier but does not call any em

list_god_nodes

Return the top-N most coupled symbols in a snapshot — those with the highest fanIn + fanOut — as a ranked list. Surfaces architectural smells: utility modules that "know too much", classes every other class depends on, etc. Unlike get_quality_hotspots (which ranks FILES by churn × complexity × (1 −

get_quality_hotspots

Rank FILES by a composite refactor-priority score: cyclomaticComplexity × (1 + churn30d/100) × (1 − testCoverage/100). High score = complex, frequently changed, poorly tested — the files most likely to break. The canonical "what should I refactor next?" list. Unlike list_god_nodes (which ranks SYMB

list_snapshots

List every code-graph snapshot stored for a given repo, newest first — each row has id, commitSha (when index_code ran inside a git working tree), createdAt, parentSnapshotId, and a stats blob. Use to TIME-TRAVEL through the repo's history: pick a snapshot_id from this list and feed it to any read-

diff_snapshots

Compute a structural diff between two snapshots of the same repo: files added / removed / modified (by contentHash), symbols (qualifiedNames) added / removed, and god-node changes (appeared / resolved). Effectively a commit-range architectural diff that answers "what actually changed between these t

set_service_mapping

Declare which Tentra canvas service owns which files in a specific snapshot — in one batched call. Each mapping is (relative file path → service id); every matching CodeFile row has its serviceId column updated. This is the bridge between the code graph (files, symbols, edges) and the architecture

set_domain_membership

Tag one file, symbol, or service as belonging to a business domain (e.g. "payments", "identity", "fraud"). Supports both AI-inferred (source="ai", lower confidence) and human-confirmed (source="human", confidence 1.0) assignments. Upserts: if the same (domain_id, entity_type, entity_id) tuple alread

record_contract

Persist a service contract — an OpenAPI spec, proto file, GraphQL schema, event schema, Kafka/RabbitMQ topic schema, etc. — as a first-class entity in the code graph, so you can then attach code symbols to it via bind_contract and query it via get_contracts. Use once per contract per version. The c

bind_contract

Link a code symbol to a contract with a typed relation: "provides" (symbol implements the contract, e.g. a handler that serves the OpenAPI endpoint), "consumes" (symbol calls the contract, e.g. a client that hits the endpoint), or "documents" (symbol describes the contract, e.g. a type definition ge

get_contracts

List every Contract stored in a workspace, newest first, with each row including a count of its bindings. Optionally filter by kind (http / grpc / event / graphql / rabbit / kafka). Use for BROWSING the workspace's contract inventory — "what API contracts do we have?", "show every Kafka topic schem

record_decision

Persist an Architecture Decision Record (ADR) — slug + title + status + context + decision + consequences — as a first-class row in the code graph, with support for supersession (auto-marking an older decision "superseded") and immediate entity links (services, files, symbols, contracts, domains).

link_decision

Attach an EXISTING decision (from record_decision) to one more entity — a service, file, symbol, contract, or domain — with a typed relationship: "motivates" (decision caused this entity to exist), "constrains" (decision limits how it can evolve), "documents" (decision explains it), "implements" (en

get_decisions_for

Look up every ADR that is linked to a specific entity — useful for answering "why is this service / file / symbol the way it is?" while reviewing code. Returns every linked decision with its full context + decision + consequences + link kind. Use proactively in code review: before changing a servic

get_spec_alignment

Mid-implementation alignment check: given files you just changed and a saved architecture, return what the spec says about that work — which services those files belong to (via set_service_mapping), the spec's declared edges in/out of each, ADRs that motivate or constrain them, and drift signals (fi

get_ownership

Resolve the owning team(s) for a given file path according to the workspace's CODEOWNERS-style rules (longest-match-wins with explicit priority). Returns a list of team or user handles. Use to answer "who owns this file?" / "who should review this change?" / "who should I ping about this bug?". Own

// known CVEs in dependencies1 critical5 high8 low

Disclosed vulnerabilities in this server's declared npm dependencies (via OSV). Whether each is reachable depends on the installed versions.

criticalvitest@2.1.9GHSA-5xrq-8626-4rwp

When Vitest UI server is listening, arbitrary file can be read and executed

highprotobufjs@8.0.1GHSA-66ff-xgx4-vchm

protobuf.js: Code injection through bytes field defaults in generated toObject code

highprotobufjs@8.0.1GHSA-685m-2w69-288q

protobuf.js: Denial of service through unbounded protobuf recursion

highprotobufjs@8.0.1GHSA-75px-5xx7-5xc7

protobuf.js: Code generation gadget after prototype pollution

highprotobufjs@8.0.1GHSA-jvwf-75h9-cwgg

protobuf.js: Process-wide denial of service through unsafe option paths

Depend on this server? Get alerted when its CVEs change.Watch this server free →
// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configAPI_URL
🔐 secretTENTRA_API_KEY
configTENTRA_BACKEND
configTENTRA_HOME
configWEB_URL
// quality suggestions

Tool annotations

No tools have read-only/destructive annotations

Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.

All four hints declared on every tool

36/36 tools missing one or more hints — create_architecture (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); update_architecture (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_architecture (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +33 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.

For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.

Tool inputs are validated

Only 9/36 tool handlers declare input schemas (25%)

Declare an inputSchema with zod/joi/yup on every tool definition.

Tool test coverage

18/36 tools referenced in tests (50%)

Write tests that reference each tool by name so every tool has at least one test.

Shell command execution

2 calls in production code run through a shell (src/index.ts:44, bin/tentra-mcp.js:76)

Prefer library functions over shell-outs. If you must shell out, ensure all inputs are properly escaped.

Production dependencies are patched

0 critical, 5 high severity in production deps — protobufjs@8.0.1 (high), protobufjs@8.0.1 (high)

Run npm audit fix, or upgrade the affected packages to a non-vulnerable version.

Dev dependencies

1 critical/high in dev-only deps (does not ship to users)

Upgrade dev dependencies when convenient.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 7 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/rdanieli/tentra-mcp?variant=verified)](https://m8ven.ai/mcp/rdanieli/tentra-mcp)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: 116cf712c71edb19b0cd318315264599e7cc7a98
code hash: 52ee169770d8f6961207833fb56aedd7205fc0ba77ef55c2f951185af6e4e02e
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client