Atlas / MCP servers / infona-ai / Infona Oss

Infona OssBLOCK

mcp/infona-ai/infona-oss

Messy CSV, JSON, or text → one LLM schema pass → deterministic rows into Neo4j → ask in English (Cypher).

Verdict
BLOCK
Grade
F
Trust score
51 /100
Exposed tools
41 31r · 7w · 3d
Transport
stdio
License
Apache-2.0
Stars
6
01

Overview

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

Messy CSV, JSON, or text → one LLM schema pass → deterministic rows into Neo4j → ask in English (Cypher).

Luna (or your configured model) sees the file once and names types, attributes, relationships. Every cell maps through that schema via insert_facts. Then ask compiles English to Cypher on the populated graph. Ingest does not merge intra-file fragments — er rebuild is the second pass. Ontology extend and field-conflict handling are part of the same loop.

infona.ai (waitlist / demo) · what's free · API · agents

Read from source at commit 2816f7d6a9b5OBSERVED · 2026-10-12
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 --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env CEREBRAS_API_KEY=${CEREBRAS_API_KEY} --env DEMO_KEY=${DEMO_KEY} --env EXA_API_KEY=${EXA_API_KEY} -- npx -y @infona-ai/[email protected]
claude-desktop
{
  "mcpServers": {
    "mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@infona-ai/[email protected]"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
        "CEREBRAS_API_KEY": "${CEREBRAS_API_KEY}",
        "DEMO_KEY": "${DEMO_KEY}",
        "EXA_API_KEY": "${EXA_API_KEY}"
      }
    }
  }
}
03

Exposed tools (41)

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

ToolRiskDescription
ClinicalTrialread
DrugreadA pharmaceutical product
SynthWidgetread
agentread
apply_ontology_changewrite
apply_ontology_changeswrite
askread
create_knowledge_graphwrite
create_tenantwrite
delete_functiondestructive
delete_knowledge_graphdestructive
delete_skilldestructive
er_rebuildread
evolve_ontologyread
export_kgread
get_entityread
get_jobread
get_skillread
grepread
ingest_csvread
ingest_dltread
ingest_textread
inspect_graph_schemaread
invoke_functionwrite
list_functionsread
list_jobsread
list_knowledge_graphsread
list_local_filesread
list_recordsread
list_skillsread
list_tenantsread
put_skillwrite
recompute_statsread
register_functionread
schedulewrite
searchread
skills_prompt_blockread
type_summaryread
validate_skillread
view_ontologyread
wait_for_jobread
04

Trust audit

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

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
infona_client/eval_llm.py:193
result = eval(expression, {"df": df, "pd": pd, "np": np, "__builtins__": safe_builtins})  # noqa: S307
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
infona_client/eval_report.py:174
print("OPENROUTER_API_KEY required for eval (LLM judge calls)", file=__import__("sys").stderr)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMInventory / provenance · inv.binary · CWE-1104
infona_client/spatiotemporal/data/geonames_cities15000.tsv.gz
geonames_cities15000.tsv.gz
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
infona_client/api/app.py:38
module = importlib.import_module(module_name)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
infona_client/api/app.py:64
module = importlib.import_module(module_name)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
infona_client/api/app.py:90
module = importlib.import_module(module_name)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
infona_client/api/app.py:117
module = importlib.import_module(module_name)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
infona_client/api/app.py:144
module = importlib.import_module(module_name)
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:43
# INFONA_LLM_BASE_URL=http://127.0.0.1:11434/v1
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:45
# INFONA_QUERY_BASE_URL=http://127.0.0.1:11434/v1
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:52
# INFONA_EMBED_BASE_URL=http://127.0.0.1:11434/v1
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:66
# INFONA_LLM_BASE_URL=http://127.0.0.1:11434/v1
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.env.example:67
# INFONA_EMBED_BASE_URL=http://127.0.0.1:11434/v1
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
tests/test_check_boundary.py:105
"ANTHROPIC_API_KEY=sk-ant-api03-9xQvT2mKp4Lw8Rn6Bz1Yc3Hd5Fg7Jk9Mq2St4Uv6Wx8Za",  # boundary-ok: fake credential planted for this self-test
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
tests/test_check_boundary.py:308
'"k":"sk-ant-api03-9xQvT2mKp4Lw8Rn6Bz1Yc3Hd5Fg7Jk9Mq",'  # boundary-ok: fake credential planted for this self-test
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
tests/test_check_boundary.py:386
'KEY="sk-ant-api03-9xQvT2mKp4Lw8Rn6Bz1Yc3Hd5Fg7Jk9Mq"',  # boundary-ok: fake credential planted for this self-test
MEDIUMHard-coded secrets · secret.aws · CWE-798, CWE-321
tests/test_check_boundary.py:115
"aws_access_key_id = AKIAQ7WXYZ12ABCD34EF",  # boundary-ok: fake infra string planted for this self-test
MEDIUMHard-coded secrets · secret.aws · CWE-798, CWE-321
tests/test_check_boundary.py:203
result = sandbox(relpath, "key AKIAQ7WXYZ12ABCD34EF")  # boundary-ok: fake credential planted for this self-test
MEDIUMHard-coded secrets · secret.aws · CWE-798, CWE-321
tests/test_check_boundary.py:225
assert sandbox(exempt, "KEY = 'AKIAQ7WXYZ12ABCD34EF'").returncode == 1  # boundary-ok: fake credential planted for this self-test
MEDIUMHard-coded secrets · secret.aws · CWE-798, CWE-321
tests/test_check_boundary.py:233
"probe.py", 'KEY = "AKIAQ7WXYZ12ABCD34EF"  # boundary-ok: planted fixture'
MEDIUMHard-coded secrets · secret.aws · CWE-798, CWE-321
tests/test_check_boundary.py:242
'A = "AKIAQ7WXYZ12ABCD34EF"  # boundary-ok: fixture\n'
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.github/workflows/test.yml:71
INFONA_DATABASE_URL: "postgresql://postgres:postgres@localhost:5432/postgres"
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
tests/test_check_boundary.py:148
'DSN = "postgresql://svc:[email protected]:5432/app"',  # boundary-ok: fake credential planted for this self-test
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
tests/test_dlt_source_wrapper.py:162
dsn="postgresql://user:hunter2@db/app",
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
tests/test_dlt_source_wrapper.py:217
"dsn": "postgresql://user:[email protected]:5432/app",

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 2816f7d6a9b5full audit observations/trust-audit/mcp-server/infona-ai__infona-oss.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-122816f7d6a9b5BLOCKF51first audit
06

Questions

What is the @infona-ai/mcp MCP server?

Messy CSV, JSON, or text → one LLM schema pass → deterministic rows into Neo4j → ask in English (Cypher).

What tools does @infona-ai/mcp expose?

41 in total: 31 read-only, 7 that write, and 3 that can delete or overwrite (delete_function, delete_knowledge_graph, delete_skill). Every one is listed on this page with its risk.

Is @infona-ai/mcp safe to connect to an agent?

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

What credentials does @infona-ai/mcp need?

It reads ANTHROPIC_API_KEY, CEREBRAS_API_KEY, DEMO_KEY, EXA_API_KEY, INFONA_ANTHROPIC_API_KEY, INFONA_API_KEY, INFONA_API_KEYS, INFONA_CEREBRAS_API_KEY, INFONA_EXTRACT_MAX_TOKENS, INFONA_EXTRACT_MAX_TOKENS_HARD, INFONA_EXTRACT_MIN_TOKENS_PER_RECORD and INFONA_EXTRACT_TOKENS_PER_RECORD 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 @infona-ai/mcp run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as @infona-ai/mcp at 0.1.66.

How current is this page?

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

Advertisement