Search / io.github.trip2g/trip2g
trip2g
R0· no sign-inServe a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.
v1.0.0 · active · repository · website · descriptor JSON · versions
Search / io.github.trip2g/trip2g
R0· no sign-inServe a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.
v1.0.0 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"trip2g": {
"type": "http",
"url": "https://trip2g.com/_system/mcp"
}
}
}claude mcp add --transport http trip2g https://trip2g.com/_system/mcp[mcp_servers.trip2g]
url = "https://trip2g.com/_system/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"trip2g": {
"type": "remote",
"url": "https://trip2g.com/_system/mcp",
"enabled": true
}
}
}{
"mcpServers": {
"trip2g": {
"type": "http",
"url": "https://trip2g.com/_system/mcp"
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=trip2g&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vdHJpcDJnLmNvbS9fc3lzdGVtL21jcCJ9"
}{
"servers": {
"trip2g": {
"type": "http",
"url": "https://trip2g.com/_system/mcp"
}
}
}{
"mcpServers": {
"trip2g": {
"httpUrl": "https://trip2g.com/_system/mcp"
}
}
}extensions:
"trip2g":
enabled: true
name: "trip2g"
type: streamable_http
uri: "https://trip2g.com/_system/mcp"
timeout: 300
protocol.modernsupports 2026-07-28 (server/discover)protocol.statelessanswers without a sessionprotocol.transportstreamable HTTPprotocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every useauth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_lengthdescriptions are concisetools.schemasevery tool has an object input schematools.annotationsno tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky onestools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: expand (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); instructions (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); federated_expand (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …tools.token_costabout 3,508 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changes3 tool changes in 30 daysstability.rug_pullno tool changed its meaning under the same namedeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packageexpandchangedinput schemafederated_expandchangedinput schemaexpandchangedinput schemaFull history: list_changes · trend: quality JSON.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +namespace-matches-repo +website +reachable +uptime-100% ~updated-92d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://trip2g.com/_system/mcp streamable-http | none | yes | 100% | 378 ms | 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05 | 2026-10-19 |
expand | 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_expand | 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. |
federated_instructions | 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_html | 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_search | 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. |
federated_similar | Find remote notes similar to a known note reference inside a connected knowledge base. Preferred: path (a federated_search result's note_path field). |
instructions | Full tool reference for the trip2g documentation base |
note_html | 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. |
search | 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. |
similar | 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. |
wiki | Wiki Knowledge Base Instructions |
Schemas: list_tools.
{
"name": "io.github.trip2g/trip2g",
"title": "trip2g",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://trip2g.com/_system/mcp",
"type": "streamable-http"
}
],
"version": "1.0.0",
"repository": {
"id": "1173239715",
"url": "https://github.com/trip2g/trip2g",
"source": "github"
},
"websiteUrl": "https://trip2g.com",
"description": "Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers."
}