trip2g
by trip2g · remote · no sign-in to list tools · v1.0.0 · published by GitHub user trip2g
Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.
12 tools: 4 change things and 8 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things4Claude Code: ask: see these tools
- Only reads8Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http trip2g https://trip2g.com/_system/mcpFindings
Matches of fixed checks, with the text they matched.
- Infofederated_asset
The description mentions "credential".
What this check looks forMatched text
description: "...ch it with curl (the URL needs no other credential) and check the sha256. The file itself..."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
12 tools
Changes things 4Claude Code: ask
expandWalk a note's table of contents level by level (progressive disclosure).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Walk 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_expandWalk a remote note's table of contents level by level inside a connected knowledge base (progressive disclosure), same as expand.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Walk 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.
instructionsFull tool reference for the trip2g documentation baseNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Full tool reference for the trip2g documentation base
wikiWiki Knowledge Base InstructionsNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Wiki Knowledge Base Instructions
Only reads 8Claude Code: allow
federated_assetGet one attachment of a remote note — a file, not text.1 finding
Why it is in this group
- The description's first verb is "get": a word for reading.
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...ch it with curl (the URL needs no other credential) and check the sha256. The file itself..."
Description, as the server wrote it Get one attachment of a remote note — a file, not text. Canonical loop: federated_note_html(kb_id, path) -> for each name in its assets: federated_asset(kb_id, note_path=<that path>, name=<name>). Returns the asset's size and sha256 and a short-lived download URL on this server that streams the file from the remote base; fetch it with curl (the URL needs no other credential) and check the sha256. The file itself never comes back in the tool result. Only a directly connected base: kb_id without '/'.
federated_instructionsFetch the instructions/guidance for a federated knowledge base by kb_id (e.g.No findings
Why it is in this group
- The description's first verb is "fetch": a word for reading.
Description, as the server wrote it Fetch 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_htmlRead a remote note inside a connected knowledge base.No findings
Why it is in this group
- The description's first verb is "read": a word for reading.
Description, as the server wrote it Read 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_searchSearch connected knowledge bases.No findings
Why it is in this group
- The name "federated_search" says "search": a word for reading.
Description, as the server wrote it Search 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. The optional fields each run an extra search whose results are merged with the main one; fill them to find more.
federated_similarFind remote notes similar to a known note reference inside a connected knowledge base.No findings
Why it is in this group
- The description's first verb is "find": a word for reading.
Description, as the server wrote it Find remote notes similar to a known note reference inside a connected knowledge base. Preferred: path (a federated_search result's note_path field).
note_htmlRead a note.No findings
Why it is in this group
- The description's first verb is "read": a word for reading.
Description, as the server wrote it Read 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.
searchSearch notes by query.No findings
Why it is in this group
- The name "search" says "search": a word for reading.
Description, as the server wrote it Search 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. The optional fields each run an extra search whose results are merged with the main one; fill them to find more.
similarFind related notes from a known note reference.No findings
Why it is in this group
- The description's first verb is "find": a word for reading.
Description, as the server wrote it Find 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.
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http trip2g https://trip2g.com/_system/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__trip2g__federated_asset",
"mcp__trip2g__federated_instructions",
"mcp__trip2g__federated_note_html",
"mcp__trip2g__federated_search",
"mcp__trip2g__federated_similar",
"mcp__trip2g__note_html",
"mcp__trip2g__search",
"mcp__trip2g__similar"
],
"ask": [
"mcp__trip2g__expand",
"mcp__trip2g__federated_expand",
"mcp__trip2g__instructions",
"mcp__trip2g__wiki"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as trip2g. Review it before you use it.
