# trip2g (remote · trip2g.com)

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

- Trust score: 60/100 (medium)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-04

## Components

- remote · `trip2g.com`: 60/100 (this document), [markdown](https://verifymcp.io/servers/trip2g-trip2g/system-mcp.md), [page](https://verifymcp.io/servers/trip2g-trip2g/system-mcp)

## Channel facts

- Endpoint: `https://trip2g.com/_system/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-04.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 10 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 57/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3664 tokens (~366/item across 10 items; 10 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 20/100
  - Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http trip2g-trip2g https://trip2g.com/_system/mcp
```

### Codex

```toml
[mcp_servers.trip2g-trip2g]
url = "https://trip2g.com/_system/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "trip2g-trip2g": {
      "type": "remote",
      "url": "https://trip2g.com/_system/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add trip2g-trip2g --url https://trip2g.com/_system/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  trip2g-trip2g:
    url: "https://trip2g.com/_system/mcp"
```

### Other

```json
{
  "mcpServers": {
    "trip2g-trip2g": {
      "type": "http",
      "url": "https://trip2g.com/_system/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-04 (score 60, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 59, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 58, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 57, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 57, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-28 (score 56, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 55, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 55)

First indexed and scored.

## MCP tools (10)

### `search` (~223 tokens)

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.

Input parameters:

- `detail_limit` (number): How many results include full snippet matches; results beyond this are returned as lightweight previews (title, path, score) to save context (default 3)
- `limit` (number): Max number of results to return (default 6)
- `query` (string, required): Search query

### `similar` (~231 tokens)

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.

Input parameters:

- `href` (string): String note href, copied verbatim from a search result's href field
- `limit` (number): Max number of results (default 10)
- `note_id` (number): Same as pid: non-negative integer (uint64) note id, copied verbatim from a search result's note_id field. Not a path, slug, or match_id. Prefer path
- `path` (string): String note path, e.g. "concepts/maska-i-glubina.md" — copy verbatim from a search result's note_path field. The default, preferred way to reference a note
- `pid` (number): Non-negative integer (uint64) note id, copied verbatim from a search result's note_id field. Not a path, slug, or match_id — a value like ":" or "/hub/goethe.md" is a path, not a note id. Prefer path

### `note_html` (~468 tokens)

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.

Input parameters:

- `context_words` (number): Optional future hint for expanding focused reads
- `href` (string): String note href or absolute URL, copied verbatim from a search result's href field
- `match_id` (string): String chunk id of the form "p<pid>:c<chunk>" (e.g. "p32:c4"), copied verbatim from a search match's match_id field. Alone it is enough to resolve the note and reads a focused window around that hit
- `note_id` (number): Same as pid: non-negative integer (uint64) note id, copied verbatim from a search result's note_id field. Not a path, slug, or match_id. Prefer path or match_id
- `path` (string): String note path, e.g. "concepts/maska-i-glubina.md" — copy verbatim from a search result's note_path field. The default, preferred way to open a note
- `pid` (number): Non-negative integer (uint64) note id, copied verbatim from a search result's note_id field. Not a path, slug, or match_id — a value like ":" or "/hub/goethe.md" is a path, not a note id. Prefer path…
- `toc_path` (array): Breadcrumb path to a specific section, e.g. ["Chapter 1", "Introduction"]. Use toc_path from a search match, or a child path from expand.

### `expand` (~323 tokens)

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. Drill down with expand, then read a leaf with note_html(path=..., toc_path=[...]) — no need to load the whole note or its full flat TOC.

Input parameters:

- `href` (string): String note href, copied verbatim from a search result's href field
- `note_id` (number): Same as pid: non-negative integer (uint64) note id, copied verbatim from a search result's note_id field. Not a path, slug, or match_id. Prefer path
- `path` (string): String note path, e.g. "concepts/maska-i-glubina.md" — copy verbatim from a search result's note_path field. The default, preferred way to reference a note
- `pid` (number): Non-negative integer (uint64) note id, copied verbatim from a search result's note_id field. Not a path, slug, or match_id. Prefer path
- `toc_path` (array): Breadcrumb path to the node to expand, e.g. ["Chapter 1"]. Omit or [] for the top level.

### `federated_search` (~334 tokens)

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.

Input parameters:

- `detail_limit` (number): How many results include full snippet matches; results beyond this are returned as lightweight previews (title, path, score) to save context (default 3)
- `kb_id` (string): Target knowledge base id; nested bases use '/' (e.g. "philosophers/nietzsche" routes through the 'philosophers' peer, recursively). Federation nests up to 3 levels deep (kb_id path segments); a deepe…
- `kb_ids` (array): Target knowledge base ids; each accepts the same nested 'peer/base' form as kb_id
- `limit` (number): Max number of results to return (default 6)
- `query` (string, required): Search query

### `federated_similar` (~232 tokens)

Find remote notes similar to a known note reference inside a connected knowledge base. Preferred: path (a federated_search result's note_path field).

Input parameters:

- `href` (string): String remote note href, copied verbatim from a federated_search result's href field
- `kb_id` (string, required): Target knowledge base id; nested bases use '/' (e.g. "philosophers/nietzsche" routes through the 'philosophers' peer, recursively). Federation nests up to 3 levels deep (kb_id path segments); a deepe…
- `limit` (number): Max number of results
- `note_id` (string): Same remote note id as pid, but as a STRING (uint64) — stringify the federated_search result's note_id field. Prefer path
- `path` (string): String remote note path, copied verbatim from a federated_search result's note_path field
- `pid` (number): Non-negative integer (uint64) remote note id, copied verbatim from a federated_search result's note_id field. Prefer path

### `federated_note_html` (~433 tokens)

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.

Input parameters:

- `href` (string): String remote note href or absolute URL, copied verbatim from a federated_search result's href field
- `kb_id` (string, required): Target knowledge base id; nested bases use '/' (e.g. "philosophers/nietzsche" routes through the 'philosophers' peer, recursively). Federation nests up to 3 levels deep (kb_id path segments); a deepe…
- `match_id` (string): String chunk id of the form "p<pid>:c<chunk>", copied verbatim from a remote search match's match_id field; alone it is enough to resolve the note
- `note_id` (string): Same remote note id as pid, but as a STRING (uint64) — stringify the federated_search result's note_id field. Not a path, slug, or match_id. Prefer path or match_id
- `path` (string): String remote note path, copied verbatim from a federated_search result's note_path field
- `pid` (number): Non-negative integer (uint64) remote note id, copied verbatim from a federated_search result's note_id field. Not a path, slug, or match_id. Prefer path or match_id

### `federated_expand` (~285 tokens)

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.

Input parameters:

- `href` (string): String remote note href, copied verbatim from a federated_search result's href field
- `kb_id` (string, required): Target knowledge base id; nested bases use '/' (e.g. "philosophers/nietzsche" routes through the 'philosophers' peer, recursively). Federation nests up to 3 levels deep (kb_id path segments); a deepe…
- `note_id` (string): Same remote note id as pid, but as a STRING (uint64) — stringify the federated_search result's note_id field. Prefer path
- `path` (string): String remote note path, copied verbatim from a federated_search result's note_path field
- `pid` (number): Non-negative integer (uint64) remote note id, copied verbatim from a federated_search result's note_id field. Prefer path
- `toc_path` (array): Breadcrumb path to the node to expand. Omit or [] for the top level.

### `federated_instructions` (~106 tokens)

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.

Input parameters:

- `kb_id` (string, required): Target knowledge base id; nested bases use '/' (e.g. "philosophers/nietzsche" routes through the 'philosophers' peer, recursively)

### `instructions` (~18 tokens)

Full tool reference for the trip2g documentation base

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/trip2g-trip2g/system-mcp#diagnostics

## Score history

- 2026-08-04: 60
- 2026-08-03: 59
- 2026-08-02: 59
- 2026-08-01: 58
- 2026-07-31: 58
- 2026-07-30: 57
- 2026-07-29: 57
- 2026-07-28: 56
- 2026-07-27: 55
- 2026-07-26: 55

## Links

- Remote endpoint: https://trip2g.com/_system/mcp
- Repository: https://github.com/trip2g/trip2g
- Website: https://trip2g.com/
- Changelog RSS feed: https://verifymcp.io/servers/trip2g-trip2g/system-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/trip2g-trip2g/system-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/trip2g-trip2g/system-mcp
