menerioBLOCK
One brain for all your AI tools. Capture your thoughts once, and every AI can understand, use, and build on them.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
What it is
Menerio is a central event store for personal data.
Project status: Alpha Menerio is usable but still evolving. APIs, data structures, and UI may change without notice. Some features are partially implemented or experimental. We recommend it for early adopters and contributors who are comfortable with rough edges.
It connects multiple apps into a single system by capturing and distributing events. Instead of isolated tools with their own data silos, Menerio acts as the backbone that keeps everything in sync.
Each connected app remains the owner of its data, while Menerio ensures that relevant changes are shared across the system.
Why it exists
Most apps today operate in isolation. Data is fragmented, duplicated, and quickly becomes inconsistent.
Menerio solves this by introducing a simple principle:
- Every record has one clear owner
- All changes are emitted as events
- All connected apps stay in sync through a central event bus
This enables a system where:
- Data remains consistent across apps
- Ownership is always clear
- Integrations become simple and scalable
The goal is not to replace apps, but to connect them into a coherent system.
Core Concepts
Single Source of Truth
Each piece of data belongs to exactly one app. Other apps receive synchronized copies but never become the source of truth.
Event-Based Architecture
All changes are emitted as events (e.g. event.created, event.updated). Menerio stores and distributes these events to subscribed apps.
Star Model (one center, many spokes)
Apps do not communicate directly with each other. All communication flows through Menerio as the center.
Synchronization with Ownership
Changes made in one app propagate back to the owning app through Menerio, ensuring consistency without conflicts.
Features (Current State)
- Central event ingestion and storage
- Event distribution to connected applications
- Basic data synchronization model
- Supabase-bac
4261e76bd2c6OBSERVED · 2026-10-11Connect
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 mcp add vite_react_shadcn_ts --env SUPABASE_ACCESS_TOKEN=${SUPABASE_ACCESS_TOKEN} --env SUPABASE_ANON_KEY=${SUPABASE_ANON_KEY} --env SUPABASE_SERVICE_ROLE_KEY=${SUPABASE_SERVICE_ROLE_KEY} -- npx -y [email protected]{
"mcpServers": {
"vite_react_shadcn_ts": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"SUPABASE_ACCESS_TOKEN": "${SUPABASE_ACCESS_TOKEN}",
"SUPABASE_ANON_KEY": "${SUPABASE_ANON_KEY}",
"SUPABASE_SERVICE_ROLE_KEY": "${SUPABASE_SERVICE_ROLE_KEY}"
}
}
}
}Exposed tools (86)
61 read · 24 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
Discord | read | Capture notes via /capture slash command |
Querino | read | AI research assistant. Syncs artefacts as notes to ${BRAND.name}. |
Slack | write | Send Slack messages straight to ${BRAND.name} |
Telegram | read | Capture notes via Telegram bot |
add_claim | write | |
add_collection_item | write | |
add_group_member | write | |
add_members_from_notes | write | |
add_wikilink | write | Create a wikilink connection from the current note to another note by its ID. |
append_to_note | read | Append markdown text to the END of the current note. Existing content is never touched. If the same text is already in the note, nothing is written. |
capture | read | Capture a thought to your Menerio brain |
capture_note | read | |
capture_thought | read | |
classify_content | read | Classify whether content violates community guidelines |
create_collection_item | write | Create a new item in the current collection. |
create_entity | write | |
create_group | write | |
create_group_next_step | write | |
create_moment | write | |
create_moment_raw | write | |
create_moment_with_ai | write | |
create_note | write | Create a NEW note in the user |
delete_collection_item | destructive | Delete a collection item by id. Use sparingly and confirm intent with the user first. |
draft_moment | read | Return a structured timeline moment draft based on the user |
extract_event | read | Extract a timeline event from the note content for use in a timeline app. |
extract_item_from_url | read | Fetch a URL and use it to draft a new collection item that matches the current collection |
find_path | read | |
generate_group_briefing | read | |
get_action_items | read | |
get_claims | read | |
get_clusters | read | |
get_collection_item | read | Fetch one item by its id. Returns the full data object. |
get_collection_schema | read | |
get_connected_notes | read | |
get_contact_context | read | |
get_contact_profile | read | |
get_entity_context | read | |
get_group | read | |
get_note | read | |
get_note_media | read | |
get_person_notes | read | |
get_person_profile | read | Look up a person from the user |
get_stats | read | |
get_user_profile | read | |
import_group_members_from_note | write | |
insert_into_note | write | Insert markdown text at a precise location in the current note without removing anything. Either give |
lexicon_create_page | write | |
lexicon_get_page | read | |
lexicon_run_lint | write | |
lexicon_search | read | |
lexicon_update_page | write | |
list_collection_items | read | List items in the current collection. Returns up to 30 rows with id, title, and data. |
list_collections | read | |
list_groups | read | |
list_moments | read | |
list_note_folders | read | List the folders that already exist in the user |
list_people | read | |
list_recent | read | |
list_recent_notes | read | |
log_group_interaction | read | |
log_interaction | read | |
preview_group_members_from_note | read | |
read_url | read | Fetch one public web page and return its readable text. Use this when the user gives you a link and wants it read, summarized, or saved as a note. For a general question with no specific link, use web_search instead. Cannot read pages that need a login, and cannot read YouTube captions. |
replace_in_note | read | Replace an exact snippet of the current note with new text. |
review_group_member_suggestion | read | |
search_all_collections | read | |
search_brain | read | |
search_claims | read | Search the user |
search_contacts | read | |
search_entities | read | |
search_images | read | |
search_media_text | read | Search across OCR-extracted text and descriptions from images and PDFs in ALL of the user |
search_moments | read | |
search_notes | read | |
search_notes_semantic | read | Search the user |
search_notes_text | read | Search the user |
search_thoughts | read | |
suggest_group_next_step | read | |
thought | read | The thought or note to capture |
trash_note | read | |
update_collection_item | write | Update fields on an existing item. Only the keys in |
update_group_membership | write | |
update_note | write | |
update_note_metadata | write | Update metadata fields on the current note (topics, type, sentiment, people, summary, etc.). |
update_note_tags | write | Set the tags on the current note (replaces existing tags). |
web_search | read | Search the live web for current information the user |
Trust audit
BLOCKgrade F · trust 41/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | WARN |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- declared (11 observation(s))
- Shell
- declared (1 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
if (h === "metadata.google.internal" || h === "instance-data") return false;
icon.icns
callback_url: callbackUrl,
await server.listen();console.log('Synthetic PersonDetail browser harness http://127.0.0.1:5179');globalThis.Deno = { env: { get: key => ({ SUPABASE_URL: `http://127.0.0.1:${port}`, SUPABASE_SERVICE_ROLE_KEY: 'synthetic-service', OPENROUTER_API_KEY: 'unused-synthetic' })[key] }, serve: fn => { edgMERGE_TEST_DATABASE_URL: postgresql://postgres:postgres@localhost/merge_review_test
GODSPEED_RATE_LIMIT_TEST_DATABASE_URL: postgresql://postgres:postgres@localhost/godspeed_rate_limit_test
GODSPEED_CONNECT_TEST_DATABASE_URL: postgresql://postgres:postgres@localhost/godspeed_connect_test
NOTE_AI_NORMALIZE_TEST_DATABASE_URL: postgresql://postgres:postgres@localhost/note_ai_normalize_test
const secret = "Top-secret-diagnosis";
const SECRET = "0123456789abcdef0123456789abcdef";
<table width="100%" cellpadding="0" cellspacing="0" style="max-width:480px;background-color:#ffffff;border-radius:16px;overflow:hidden;box-shadow:0 1px 3px rgba(226,54,112,0.12);">
<a href="{{ .ConfirmationURL }}" target="_blank" style="display:inline-block;padding:12px 32px;background-color:#e23670;color:#ffffff;font-size:15px;font-weight:600;text-decoration:none;border-radius:<table width="100%" cellpadding="0" cellspacing="0" style="max-width:480px;background-color:#ffffff;border-radius:12px;overflow:hidden;box-shadow:0 1px 3px rgba(0,0,0,0.08);">
<a href="{{ .ConfirmationURL }}" target="_blank" style="display:inline-block;padding:12px 32px;background-color:#18181b;color:#ffffff;font-size:15px;font-weight:600;text-decoration:none;border-radius:delete_collection_item
return new Function("exports", ...Object.keys(bindings), code)({}, ...Object.values(bindings));new Function('Deno','createClient','console',compiled)(new Function("require", "Deno", "EdgeRuntime", "exports", output)(return new Function(...Object.keys(bindings), code)(...Object.values(bindings)) as {return new Function('exports',...Object.keys(bindings),ts.transpileModule(source+'\n'+suffix,{compilerOptions:{target:ts.ScriptTarget.ES2022,module:ts.ModuleKind.None}}).outputText)({},...Object.valueimport { functionsToDeploy } from "../../../scripts/golive/functions-to-deploy.mjs";import * as edge from "../../../supabase/functions/_shared/mc-ranking";
import { GODSPEED_SOURCE_APP, isGodspeedMirror } from "../../../supabase/functions/_shared/mc-source";} from "../../../supabase/functions/_shared/people-import";
Gates applied: no_behavioural_pass.
4261e76bd2c6full audit observations/trust-audit/mcp-server/michaelzelbel__menerio.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | 4261e76bd2c6 | BLOCK | F | 41 | first audit |
Questions
What is the menerio MCP server?
One brain for all your AI tools. Capture your thoughts once, and every AI can understand, use, and build on them.
What tools does menerio expose?
86 in total: 61 read-only, 24 that write, and 1 that can delete or overwrite (delete_collection_item). Every one is listed on this page with its risk.
Is menerio safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (41/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. Separately from the audit: 1 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does menerio need?
It reads SUPABASE_ACCESS_TOKEN, SUPABASE_ANON_KEY and SUPABASE_SERVICE_ROLE_KEY 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 menerio run?
It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as vite_react_shadcn_ts at 0.0.0.
How current is this page?
The grade is for one exact copy of the source (4261e76bd2c6), read on 2026-10-11. The repository is watched and re-audited when it changes.