Glyph Hold MCP
Local stdio MCP connector to Glyph Hold 2's /api/v2 for memory and secret operations.
Check Glyph Hold service health and version.
List available memory categories.
Search memories with deterministic FTS and filters for limit, category, and archived records.
Prefetch bounded, conservative memory context relevant to a message.
Create memories with category, title, body, tags, summary, confidence, and auto-prefetch level.
Create encrypted secrets with metadata such as type, scope, service, host, tags, and description.
Reveal a secret value only when explicitly requested by ID or name.
Requires configured Glyph Hold URL/API key and appropriate memory/secret scopes; tool failures return structured payloads.
Integrates with Vaultwarden as a live secret provider, enabling search and metadata access to accessible vault entries, secret creation and updates, folder management, field-level secret reveal, and migration of built-in secrets without exposing values to the agent.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Glyph Hold MCP search memories for 'server setup'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Glyph Hold MCP connector
Version 2.2.0 is a local stdio MCP server for Codex and other MCP clients. It uses
Glyph Hold 2's public /api/v2 HTTP API and never opens the server's SQLite file.
Upgrade this connector alongside the server; version 0.1.0 is for GH1.
Setup
Use Python 3.12+ and install locally with pip install -e ".[dev]". The FastMCP
SDK dependency is pinned below major version 2 because that major changes the
server API. Configure .env or your MCP host environment:
GLYPHHOLD_URL=https://your-glyphhold-host.example.com
GLYPHHOLD_API_KEY=gh_live_xxxxxxxxxxxxxxxxxExisting timeout/TLS options in .env.example remain supported. In GH2 create
the API key, assign its explicit space grants and default destination, and grant
only required scopes: memories:read, memories:write, secrets:write, and
secrets:reveal. API-level admin scope does not grant all spaces. Run
glyphhold-mcp as the stdio command in your host's MCP configuration, with the
checkout's environment and Python executable. No live host configuration is
changed by this source upgrade.
Related MCP server: MCP HTTP Client Server
Contract
glyphhold_capabilitiesreports permitted spaces and the connection default.prefetch_memoriesreturns bounded active/General context with IDs, versions, ownership, provenance and freshness.search_memoriesaccepts explicit broader discovery. A result in another space does not change the write destination.create_memoryrequires a stable idempotency key. Reuse it for retries.update_memory,archive_memory,move_memoryandrestore_memory_revisionrequire the last-read expected version. Reread after HTTP 409 conflicts.get_memory_context,set_memory_contextandget_placement_guidancesupport deliberate per-conversation routing and owner-confirmed associations. Supply the same unique session ID to context, search/recall and create operations.Secret metadata and explicit per-secret reveal remain separate and work with built-in or Vaultwarden providers. Secrets are global and independent of memory spaces.
Destructive delete, bulk environment reveal and lexical conflict claims are removed from this GH2 surface.
Tool failures remain structured ordinary payloads so a missing record or conflict never invalidates the entire connector. Source content and credentials are not included in error logs. Tool availability alone cannot guarantee pre-response recall: configure the host workflow or use a native memory-provider integration.
Run python -m pytest tests. Tests validate tool schemas, error containment,
transport safety, idempotent/versioned writes and explicit reveal paths. The GH2
checkout also has local cross-repository ASGI conformance tests covering this
client, Hermes and Nexus against the actual backend. Live host setup and network
connectivity still need a deployment rehearsal.
Live secret providers (2.1)
With Vaultwarden enabled, search and metadata read all accessible vault entries
directly, including pre-existing items. Built-in secrets remain accessible.
Secret space_id is accepted for compatibility but no longer scopes access;
API keys still require secret permissions. Memory spaces are unchanged.
create_secret uses the active provider and rejects duplicate names. Optional
folder_id chooses a vault folder; omission uses the configured default and an
empty string means unfiled. list_secret_folders and create_secret_folder
manage optional folders. No memory-to-folder mapping or item linking is needed.
reveal_secret(field=...) selects a field from metadata (password, username,
SSH keys, notes, card/identity or custom fields). update_secret requires the
current metadata version and preserves other fields. External changes cannot
be made atomically against concurrent edits in other Bitwarden clients.
migrate_secret transfers a built-in secret without exposing its value to the
agent. Search first: provide an existing target_id and field to verify equal
values, or omit target ID to create only when the name is unused. Conflicts
retain both values for user review; never blindly overwrite or export plaintext.
Provider outages fail explicitly rather than look like an empty vault. Upgrade
the server and adapters together to use these operations.
2.1.3 search and migration recovery
search_secrets(query=...) also matches saved website addresses and hostnames,
including IP addresses. Metadata adds websites (normalised origins only) and
hostnames; URL usernames/passwords, paths, query tokens and fragments are
excluded. Multiple accounts stay separate; never select one by hostname alone.
Use provider_name=builtin for the remaining migration checklist.
migrate_secret(dry_run=true) checks an existing field or previews creation
without changing either provider. Known provider failure codes produce safe,
actionable tool errors; arbitrary error bodies are not echoed. An uncertain
write requires destination inspection before retrying.
Selective recall (2.2)
Automatic recall supplies a small relevant starting context. An empty result does not mean that no matching memories exist; even a nonempty result can concern the wrong entity or space. Search explicitly for missing personal facts, try shorter terms or synonyms, and broaden deliberately for another permitted space. Read the full record by ID when an excerpt omits evidence. Tool parameters are unchanged.
Available Tools
24 toolsarchive_memoryB
Archive a memory reversibly with concurrency protection.
Inputs: memory_id (required), expected_version (required).
create_memoryC
Save a durable memory after search. Reuse the idempotency key for retries.
Inputs: body (required), title (required), idempotency_key (required), tags, +8 more.
create_secretA
Create in the active provider after searching for duplicates. Secrets are global. Optional folder_id selects a vault folder; empty string means unfiled, omission uses the default. space_id is deprecated.
Inputs: name (required), value (required), uri, space_id, +4 more.
create_secret_folderA
Create a vault folder after checking existing folders. Requires external writes.
Inputs: name (required).
get_memoryC
Read a record and its current version.
Inputs: memory_id (required).
get_memory_contextC
Read active context and confirmed placement guidance for one conversation.
Inputs: session_id (required).
get_placement_guidanceC
Read owner-confirmed guidance for placing new memories.
Inputs: space_id.
get_secret_metadataC
Inspect one secret without revealing its value.
Inputs: id_or_name (required), space_id.
glyphhold_capabilitiesC
Discover permitted spaces, defaults and GH2 features.
Inputs: no named parameters.
glyphhold_healthC
Check service health.
Inputs: no named parameters.
list_categoriesA
List categories; these classify records and do not grant access.
Inputs: no named parameters.
list_memoriesC
List permitted records with versions and ownership.
Inputs: limit, offset, space_id, include_archived.
list_memory_revisionsD
Inspect permitted historical snapshots.
Inputs: memory_id (required).
list_secret_foldersB
List optional vault folders. Built-in storage returns supported=false.
Inputs: no named parameters.
migrate_secretA
Transfer a built-in secret directly to the vault without exposing its value. Search first: pass an existing target_id and field to verify identical values, or omit target_id to create only if the name is unused. Different values require user review; neither is overwritten. Use dry_run=true to preview without changes.
Inputs: id_or_name (required), expected_version (required), field, dry_run, +2 more.
move_memoryC
Explicitly move ownership; requires write grants in both spaces.
Inputs: space_id (required), memory_id (required), expected_version (required).
prefetch_memoriesC
Recall bounded active and General context. Check entity and space: even nonempty recall may be insufficient. Search explicitly when needed and get full records by ID when excerpts omit required evidence.
Inputs: message (required), space_id, max_chars, session_id, +1 more.
restore_memory_revisionC
Restore a permitted revision while checking concurrent edits.
Inputs: memory_id (required), revision_id (required), expected_version (required).
reveal_secretB
Explicitly reveal one field for an authorised task. Use metadata fields to select username, password, SSH key, notes or custom fields.
Inputs: id_or_name (required), field, space_id.
search_memoriesB
Search active space; try shorter terms or synonyms when needed. Explicitly broaden across permitted spaces for other contexts; this does not change writes.
Inputs: query (required), limit, broaden, space_id, +2 more.
search_secretsB
Search global secret metadata by name, folder, saved website address or hostname. provider_name=builtin allows local-only access during a vault outage. No values are returned.
Inputs: query, space_id, provider_name.
set_memory_contextB
Change one conversation's active space without changing connection default.
Inputs: space_id (required), session_id (required).
update_memoryC
Update using the last-read version; reread and reconcile after conflicts.
Inputs: memory_id (required), expected_version (required), body, tags, +5 more.
update_secretA
Update one explicitly selected secret field using its current metadata version. Never overwrite a conflicting value without authorisation.
Inputs: value (required), id_or_name (required), expected_version (required), field.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 24 tools
Most tools target clearly distinct resources or lifecycle actions, with secrets, memories, context, health, and capabilities separated well. The main ambiguity is among the memory retrieval tools: list_memories, search_memories, and prefetch_memories overlap conceptually and require careful reading of their descriptions to choose correctly.
The surface predominantly follows a snake_case verb_noun convention, such as create_memory, update_secret, and list_memory_revisions. The main deviations are glyphhold_health and glyphhold_capabilities, which use a server-name prefix and noun-style names rather than the dominant pattern.
At 24 tools, the surface is heavy for a single MCP server and sits in the borderline range where tool selection becomes more demanding. The tools appear purposeful across the secret and memory domains, but the count is large enough to create cognitive load and increase misselection risk.
The tool set provides broad lifecycle coverage for memories, including create, read, search, update, archive, move, revisions, context, and placement guidance. Secrets are also well covered, but there is no delete_secret or delete_secret_folder operation, leaving minor lifecycle gaps that may require workarounds.
Maintenance
Related MCP Connectors
Official remote MCP server for Archivist AI TTRPG campaign memory: characters, sessions, and more.
MCP server for OpenAI API (chat completions, image generation, embeddings) via AceDataCloud
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that provides LLMs access to other LLMs449 npm82MIT
- AlicenseNot gradedqualityDmaintenanceA powerful MCP server for making HTTP requests, GraphQL queries, and TCP/Telnet connections from AI assistants.7MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that wraps the nexus CLI, giving AI agents cross-session memory, semantic search, preference learning, and smart context injection.90 npmMIT
- AlicenseAqualityCmaintenanceBridges OpenAI Codex CLI to any MCP client, allowing headless Codex sessions via tools like codex and codex-reply.244 npm1MIT