protogrid

Search / io.github.trip2g/trip2g

trip2g

R0· no sign-in

Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.

v1.0.0 · active · repository · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality83good
Trust90of 100
Uptime, 30 days100%
Latency p50378 ms

Connect

8 clients · secrets stay placeholders
{
  "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

Quality 83 / 100good

protocol88 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • warn
    protocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every use
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene71 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • fail
    tools.annotationsno tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
  • fail
    tools.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); …
  • pass
    tools.token_costabout 3,508 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability100 · weight 15
  • pass
    stability.changes3 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

11 tools, about 3,508 tokens to load them all · tool set 5342a819b800 · tools last changed 2026-10-08 · checked 2026-10-19 10:20 UTC

Tool changes

  • expandchangedinput schema
  • federated_expandchangedinput schema
  • expandchangedinput schema

Full 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.

Trust 90 / 100

provenance90
liveness100
freshness65
hygiene100

+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.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://trip2g.com/_system/mcp streamable-httpnoneyes100%378 ms2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-052026-10-19

Tools (11)

expandWalk 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. 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_instructionsFetch 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. 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. 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_similarFind remote notes similar to a known note reference inside a connected knowledge base. Preferred: path (a federated_search result's note_path field).
instructionsFull tool reference for the trip2g documentation base
note_htmlRead 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. 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.
similarFind 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.
wikiWiki Knowledge Base Instructions

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "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."
}