trip2g MCP server
Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.
39 stars
Reviews
Write oneNobody has reviewed trip2g yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
trip2g tools (11)
write = sends, deletes, buys or postsexpandFreeWalk a note's table of contents level by level (progressive disclosure). Canonical call: expand(path=<result.note_path>, toc_path=[...]) — copy path verbatim from a search result's note_path field. Returns the direct children of a TOC node: omit toc_path (or pass []) for the top-level sections, or pass a toc_path to list that section's subsections. Each child has title, level, path, and has_children. A section with subsections lists them; a section without subsections is returned in full (what note_html gives for that toc_path, plus section_html in the payload), so no second call is needed to read a leaf. This cannot be turned off, and a client that wants only structure never triggers it: has_children on each listed child says where descending would turn into reading.
federated_expandFreeWalk a remote note's table of contents level by level inside a connected knowledge base (progressive disclosure), same as expand. Canonical call: federated_expand(kb_id=..., path=<result.note_path>, toc_path=[...]). Omit toc_path for the top level, or pass a toc_path to list that node's subsections. A section with subsections lists them; a section without subsections is returned in full, as federated_note_html would return it — has_children on each listed child says where that happens.
federated_instructionsFreeFetch the instructions/guidance for a federated knowledge base by kb_id (e.g. "philosophers/nietzsche") — read a base's own conventions before searching it. Nested bases are addressed with '/' and the call routes through each peer recursively.
federated_note_htmlFreeRead a remote note inside a connected knowledge base. Canonical call, copying fields verbatim from a federated_search result: federated_search(kb_id="philosophers/<author>", query) -> federated_note_html(kb_id="philosophers/<author>", path=<result.note_path>) — the standard way to descend into a leaf corpus and read real content there, not hub cards. federated_note_html(kb_id=..., match_id=<match.match_id>) reads just the focused chunk around a hit. Only pass pid/note_id if you already copied that exact id from a result. path is a string like "concepts/x.md"; match_id is "p<pid>:c<chunk>"; a value like ":" or "/hub/goethe.md" is a PATH, not a note_id.
federated_searchFreeSearch connected knowledge bases. Returns snippets with heading breadcrumbs (title > section > subsection) and a precise toc_path per match, same as search; results also carry an absolute kb_id (string) to use verbatim on follow-up calls. Pass kb_id for one base, kb_ids for selected bases, or omit both to fan out. Nested bases are addressed with '/': kb_id "philosophers/nietzsche" routes through the 'philosophers' peer to the base it federates (recursive), up to 3 levels deep. Canonical call: federated_search(kb_id="philosophers/<author>", query) -> federated_note_html(kb_id="philosophers/<author>", path=<result.note_path>) — the standard way to descend into a leaf corpus and read real content, not hub cards.
federated_similarFreeFind remote notes similar to a known note reference inside a connected knowledge base. Preferred: path (a federated_search result's note_path field).
instructionsFreeFull tool reference for the trip2g documentation base
note_htmlFreeRead a note. Canonical calls, copying fields verbatim from a search result: search(query) -> note_html(path=<result.note_path>) reads the whole note; search(query) -> note_html(match_id=<match.match_id>) reads just the focused chunk around a hit (cheaper, targeted); expand(path=<result.note_path>, toc_path=[...]) -> note_html(path=<result.note_path>, toc_path=[...]) reads one exact section. Only pass pid/note_id if you already copied that exact integer from a result's note_id field — never invent one. path is a string like "concepts/x.md"; match_id is "p<pid>:c<chunk>"; a value like ":" or "/hub/goethe.md" is a PATH, not a note_id.
searchFreeSearch notes by query. Returns snippets with a heading breadcrumb (title > section > subsection) that locates the approximate section, plus a precise toc_path per match. Each result carries note_path (string) and note_id (integer); each match carries match_id (string, form "p<pid>:c<chunk>"). Drill-down workflow: 1) search to find the approximate section via the breadcrumb; 2) call note_html(path=<result.note_path>, toc_path=[...]) to read the matched section, or expand(path=<result.note_path>, toc_path=[...]) to navigate the note's structure level by level; 3) note_html(path=<result.note_path>, match_id=<match.match_id>) for a focused chunk window. Each match also carries section_url — a link straight to that heading, for citing the section rather than the whole note.
similarFreeFind related notes from a known note reference. Preferred: path (a search result's note_path field). Use this after opening a promising note when you need nearby context.
wikiFreeWiki Knowledge Base Instructions
Public scan report
scanner v0.1.9 · 2026-09-25 · same rubric, same numbers if you re-run it
- –Code scanremote-only server, no package to scann/a
- Live reliabilityremote reachable in 1553ms20/20
- Tool poisoning11 tool descriptions checked15/15
- Auth qualityopen endpoint, read-only tools10/15
- Maintenancelast push 4 days ago15/15
- Maintainer identityregistry namespace matches repository owner7/10
What the publisher says
From the trip2g repository's README, as published. We do not edit it. Read it on GitHub
trip2g
Publish your Obsidian vault as a website. Self-hosted MCP memory for AI agents.
Write in Obsidian, press Sync, your notes are live. The same self-hosted hub serves readers a website and serves agents an MCP endpoint, publishes to Telegram, and gates paid content. Under the hood it is a Markdown Operating System: every note is a file, and one note is both a web page for a human and a tool call for an agent.
Why trip2g
- Your notes work twice. One markdown file renders as a page for readers and answers search / note_html calls from any MCP client. No export step, no copy of your knowledge locked in a vector store you can't read.
- Your data stays yours. Plain markdown, a git-cloneable vault, every edit a readable diff. No SaaS in the middle, and you can move out any time with git clone.
- One process to run. A single Go binary on SQLite. It starts the same on a laptop, a small VM, or a container. MIT licensed.
<!-- DEMO GIF placeholder: ~15 seconds, edit a note in Obsidian, press Sync, refresh the page, then ask an MCP client about the change. Drop the recording at docs/assets/demo.gif and replace this comment with: -->
Quickstart
See it work in 30 seconds. Add the public knowledge hub to any MCP client and ask it a question. It searches all connected bases and answers with sources:
{
"mcpServers": {
"trip2g": {
"url": "https://trip2g.com/_system/mcp"
}
}
}Run your own hub:
git clone https://github.com/trip2g/trip2g && cd trip2g/quickstart
docker compose upOpen http://localhost:8081, sign in with owner@example.com and code 111111, and download the preconfigured Obsidian vault from the home page. One container, files on local disk, full-text search — no other services needed.
Prefer no terminal? Get a free cloud instance. All the options (single binary, Docker Compose behind TLS, fly.io) are in the self-host guide.
Docs · Getting started · MCP tools · Self-host · Contributing
Everything is a note
Unix made everything a file. trip2g makes everything a note.
One global namespace, path-addressed, shared by humans and agents. A note is a markdown file: the frontmatter is its metadata, the body is its content. The same note is served as a web page (the display server) and over MCP (the agent's syscall surface), and every edit is snapshotted into note_versions and mirrored to git. So the history is a readable diff, not a binary blob.
human A human B human C
│ │ │
▼ ▼ ▼
agent A agent B agent C
│ │ │
▼ ▼ ▼
┌────────┐ MCP ┌────────┐ MCP ┌────────┐
│ hub A │ ◄───► │ hub B │ ◄───► │ hub C │
└────────┘ └────────┘ └────────┘
▲ ▲ ▲
└─── humans browse · agents query ──┘Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
Install directly
claude mcp add --transport http trip2g https://trip2g.com/_system/mcp
trip2g: common questions
- Is trip2g MCP server safe?
- Yes, by our scan: it is graded A (89/100). Read the trip2g safety report
- How do I install trip2g?
- It runs remotely at trip2g.com. Add it to Claude Code, Claude Desktop or Cursor with the snippets above, or call it through the mcp.market gateway without installing anything.
- Does trip2g need an API key?
- Not as far as the registry entry and our scan can tell: no credentials are declared or required.
- Is trip2g maintained?
- The last commit was 6 days ago (2026-09-21). The latest release is v1.0.0.
- Is trip2g up?
- 100% of our last 28 checks got an answer. We check remote servers about four times a day.
- What can I use instead of trip2g?
- Servers from other publishers that do the same job: Silica Core MCP server, Apple Notes MCP server and SearXNG Search MCP server. Compare all trip2g alternatives.
Alternatives to trip2g
Same job from other publishers: the closest match first, then the best rated.
- Silica CoreRetrieval over the folder the session opened: files, search, read, code_pack, write_note.not reviewedEstablishedA
Apple NotesSearch, read and act on Apple Notes — folders, attachments, writes off by defaultnot reviewedGrowingA- SearXNG SearchMCP server for SearXNG — privacy-respecting web search with pagination, URL readingnot reviewedEstablishedB
DocsMintCloud or self-hosted knowledge for AI agents: hybrid search, reranking, GraphRAG, scoped MCP tools.not reviewedEstablishedA- M3 MemoryLocal-first memory — 100+ tools, 99.2% LongMemEval-S retrieval@10, hybrid search, GDPR, no cloud.not reviewedEstablishedA