Local Dev
SmilyOrg/photofield
Run, test, and debug the photofield server locally. An agent skill from SmilyOrg/photofield.
Checklist for adding a new Memory-prefixed tool to remindb's Go MCP server: tool file, registration, test, skill docs, plus the locking and logging rules.
$ npx skills add radimsem/remindb --skill add-mcp-tool -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install radimsem/remindb add-mcp-tool --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/radimsem/remindb.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/add-mcp-tool .claude/skills/add-mcp-tool && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "add-mcp-tool" agent skill from https://github.com/radimsem/remindb/tree/dev/.claude/skills/add-mcp-tool into .claude/skills/add-mcp-tool/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-mcp-tool", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/radimsem/remindb/tree/dev/.claude/skills/add-mcp-toolType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add radimsem/remindb --skill add-mcp-tool -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install radimsem/remindb add-mcp-tool --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/radimsem/remindb.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/add-mcp-tool .agents/skills/add-mcp-tool && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "add-mcp-tool" agent skill from https://github.com/radimsem/remindb/tree/dev/.claude/skills/add-mcp-tool into .agents/skills/add-mcp-tool/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-mcp-tool", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add radimsem/remindb --skill add-mcp-tool -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install radimsem/remindb add-mcp-tool --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/radimsem/remindb.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/add-mcp-tool .cursor/skills/add-mcp-tool && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "add-mcp-tool" agent skill from https://github.com/radimsem/remindb/tree/dev/.claude/skills/add-mcp-tool into .cursor/skills/add-mcp-tool/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-mcp-tool", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/radimsem/remindb.git --path .claude/skills/add-mcp-tool--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add radimsem/remindb --skill add-mcp-tool -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install radimsem/remindb add-mcp-tool --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/radimsem/remindb.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/add-mcp-tool .gemini/skills/add-mcp-tool && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "add-mcp-tool" agent skill from https://github.com/radimsem/remindb/tree/dev/.claude/skills/add-mcp-tool into .gemini/skills/add-mcp-tool/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-mcp-tool", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install radimsem/remindb add-mcp-toolInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add radimsem/remindb --skill add-mcp-tool -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/radimsem/remindb.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/add-mcp-tool .github/skills/add-mcp-tool && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "add-mcp-tool" agent skill from https://github.com/radimsem/remindb/tree/dev/.claude/skills/add-mcp-tool into .github/skills/add-mcp-tool/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-mcp-tool", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add radimsem/remindb --skill add-mcp-tool -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install radimsem/remindb add-mcp-tool --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/radimsem/remindb.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/add-mcp-tool .opencode/skills/add-mcp-tool && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "add-mcp-tool" agent skill from https://github.com/radimsem/remindb/tree/dev/.claude/skills/add-mcp-tool into .opencode/skills/add-mcp-tool/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-mcp-tool", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
add-mcp-toolChecklist for adding a new Memory-prefixed tool to remindb's Go MCP server: tool file, registration, test, skill docs, plus the locking and logging rules.
Each tool is a file in pkg/mcp/tools, written as a method on the Deps type that takes a typed input struct, calls into the Store, Engine or Tracker and returns a call result with text content. Adding one means four changes plus a docs sync: a new tool file with an input struct and handler, an AddTool entry in registerTools in pkg/mcp/server.go, a test in tools_test.go using the mcptest environment, and an update to the remind or memorize skill's tool inventory.
Rules every tool follows: named return values so the deferred logCall helper can capture the final error, logCall as the first line with the Memory prefix, error wrapping with %w, and one formatted text string as the result. Locking depends on the kind of tool. Read-only tools such as MemorySearch and MemoryFetch skip the store's OpMu mutex, while mutating tools such as MemoryWrite and MemorySummarize take it right after the deferred logger and release it with a defer.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 977b31c. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are go).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Add an MCP Tool to remindb loads about 2.1k tokens when it runs. Until then it costs about 79 tokens; SKILL.md has 746 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from radimsem/remindb at commit 977b31c, republished under its MIT licence (© radimsem). 746 words, ~2,073 tokens.
.claude/skills/add-mcp-tool/SKILL.md (or your agent's skills folder).Tools live in pkg/mcp/tools/ as one file per tool. Each tool is a method on *Deps that takes a typed input struct, calls into Store / Engine / Tracker, and returns a *mcp.CallToolResult with text content. Adding one means four changes plus a docs sync.
| File | What changes |
|---|---|
pkg/mcp/tools/<tool>.go | New file — XxxInput struct + HandleXxx method on *Deps |
pkg/mcp/server.go | Add a mcp.AddTool(srv, ...) entry to registerTools |
pkg/mcp/tools/tools_test.go | Test using mcptest.NewEnv from internal/mcptest |
skills/remind/SKILL.md (read tools) or skills/memorize/SKILL.md (write tools) | Add the new tool to the inventory and any pattern section it belongs in |
The shape is uniform across fetch.go, search.go, summarize.go, write.go. Mirror it.
package tools
import (
"context"
"fmt"
"time"
gomcp "github.com/modelcontextprotocol/go-sdk/mcp"
)
type ExampleInput struct {
Anchor string `json:"anchor" jsonschema:"Node ID to operate on"`
Budget int `json:"budget,omitempty" jsonschema:"Token budget for the response"`
}
func (d *Deps) HandleExample(ctx context.Context, _ *gomcp.CallToolRequest, input ExampleInput) (_ *gomcp.CallToolResult, _ any, err error) {
defer d.logCall("MemoryExample", &err, time.Now(), "anchor", input.Anchor, "budget", input.Budget)
// Write-side tools take the lock; read-side tools do not (see "Locking" below).
// d.Store.OpMu.Lock()
// defer d.Store.OpMu.Unlock()
result, err := d.Engine.DoSomething(ctx, input.Anchor, input.Budget)
if err != nil {
return nil, nil, fmt.Errorf("failed to do-something: %w", err)
}
d.boostResultNodes(ctx, result) // read tools only
return &gomcp.CallToolResult{
Content: []gomcp.Content{&gomcp.TextContent{Text: result.Format()}},
}, nil, nil
}Five things every tool gets right:
(_ *gomcp.CallToolResult, _ any, err error) is the SDK signature; the err name is required so defer d.logCall(..., &err, ...) can capture the final error. Renaming or omitting err silently breaks call logging.defer d.logCall(...) on the first line. Prefix the tool name with Memory to match the registered name. Pass enough attrs to debug a misbehaving call (anchor, budget, payload byte-count — never the full payload).failed to <verb>: per go-concise.md §5; wrap the engine/store error with %w so callers can errors.Is.*mcp.CallToolResult with text content. Format complex results into one string before returning — clients render text, not structured JSON.The store uses a single sync.Mutex exposed as Store.OpMu (memory: "no wrapper methods around sync primitives"). The rule:
| Tool kind | Take OpMu |
|---|---|
Read-only (MemorySearch, MemoryFetch, MemoryTree, MemoryDelta, MemoryHistory, MemoryRelated) | No |
Mutating (MemoryWrite, MemorySummarize, MemoryCompile, MemoryRelate) | Yes |
Mutating tools call d.Store.OpMu.Lock() immediately after the deferred logger and defer d.Store.OpMu.Unlock(). See pkg/mcp/tools/summarize.go:21-22 and write.go:24-25 for the canonical pattern.
Read tools also call d.boostResultNodes(ctx, result) to bump temperature on accessed nodes — mutating tools do not (the write itself is the access).
Open pkg/mcp/server.go:146-186 (the registerTools function) and add:
mcp.AddTool(srv, &mcp.Tool{
Name: "MemoryExample",
Description: "<one short sentence — what it does, not how>",
}, d.HandleExample)Keep the name Memory<Verb> so it sorts cleanly with the existing inventory and matches the defer d.logCall(...) argument.
pkg/mcp/tools/tools_test.go uses the in-process MCP transport via internal/mcptest.NewEnv(t). Call your tool through the client session and assert on the text output:
func TestExample_HappyPath(t *testing.T) {
env := mcptest.NewEnv(t)
res := env.CallTool(t, "MemoryExample", map[string]any{
"anchor": "<seeded-id>",
"budget": 500,
})
text := env.TextContent(t, res)
if !strings.Contains(text, "<expected substring>") {
t.Fatalf("unexpected output: %s", text)
}
}Two public skills under skills/ are the contract with future Claude sessions about what tools exist. Pick the one that matches the tool's side:
| Tool kind | Skill to update |
|---|---|
Read (MemoryTree, MemorySearch, MemoryFetch, MemoryDelta, MemoryHistory, MemoryRelated) | skills/remind/SKILL.md |
Write (MemoryWrite, MemorySummarize, MemoryCompile, MemoryRelate) | skills/memorize/SKILL.md |
| Crosses the boundary (introduces a new mental-model concept used on both sides) | Both |
For each affected skill, when you add a tool:
description tool list.Skipping this means future sessions won't know the tool exists. The skills are the API contract, not just docs.
1. pkg/mcp/tools/<tool>.go (Input struct + Handle method on *Deps)
2. pkg/mcp/server.go (mcp.AddTool entry in registerTools)
3. pkg/mcp/tools/tools_test.go (env := mcptest.NewEnv(t); env.CallTool(...))
4. skills/remind/SKILL.md (read tools)
OR
skills/memorize/SKILL.md (write tools)
OR both, when the change crosses the read/write boundary
5. go test ./pkg/mcp/... (must pass)OpMu. The temperature boost in boostResultNodes is the one exception — it goes through Tracker.RecordAccess → BoostTemperatureBatch, which serializes through SQLite's WAL writer, not the in-memory mutex.err return. defer d.logCall(..., &err, ...) captures err by pointer. If the function signature uses an unnamed error or shadows err with :=, the deferred log shows <nil> for failed calls.nil, nil, nil on the no-result path. Return an empty *mcp.CallToolResult with a text body like "no results" — clients expect text, not a missing content array. See pkg/mcp/tools/search.go and the query.FormatCompact "no results" string."payload_bytes", len(input.Payload)) — payloads can be MB, and slog will serialize the whole thing.skills/remind/SKILL.md; write tools in skills/memorize/SKILL.md. Test: a fresh session reading the relevant skill should be able to use the new tool from the description alone..claude/rules/go-concise.md — error wrapping, naming, locking discipline, no-wrapper-methods rule.claude/rules/git-versioning.md — one commit per logical change; the four code edits ship together as feat(mcp): add MemoryExample tool, the docs sync as a follow-up docs(skill): document MemoryExample if it grew large, otherwise bundled.claude/skills/add-store-query/SKILL.md — if the new tool needs a query the store doesn't have yet, do that skill firstskills/remind/SKILL.md — docs target for read-side tools (MemoryTree, MemorySearch, MemoryFetch, MemoryDelta, MemoryHistory, MemoryRelated)skills/memorize/SKILL.md — docs target for write-side tools (MemoryWrite, MemorySummarize, MemoryCompile, MemoryRelate)© radimsem, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/add-mcp-tool of radimsem/remindb.
Open the folder on GitHubat commit 977b31c
Add an MCP Tool to remindb next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Add an MCP Tool to remindb this skillradimsem/remindb | 129 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Local DevSmilyOrg/photofield | 608 | — | ~2.4k | Automated safety check: Pass | MIT | |
| MemPalace Setup and OperationMemPalace/mempalace | 59k | — | ~2.2k | Automated safety check: Pass | MIT | |
| agentmemory Setup and Diagnosticsrohitg00/agentmemory | 29k | — | ~1k | Automated safety check: Notes | Apache-2.0 | |
| Qmdbreferrari/obsidian-mind | 5k | — | ~1.7k | Automated safety check: Pass | MIT | |
| Memori MCP Memory UsageMemoriLabs/Memori | 17k | — | ~3.8k | Automated safety check: Pass | MIT |
SmilyOrg/photofield
Run, test, and debug the photofield server locally. An agent skill from SmilyOrg/photofield.
MemPalace/mempalace
Installs and configures MemPalace as a private local palace, a shared-brain hub or a client of an existing hub, including MCP registration and version-correct initialization.
rohitg00/agentmemory
Sets up and troubleshoots a local agentmemory install, covering the MCP connection, environment variables, ports, authentication and optional feature flags.
breferrari/obsidian-mind
Search the vault using QMD semantic search. An agent skill from breferrari/obsidian-mind.
MemoriLabs/Memori
Teaches an MCP-connected agent when and how to call Memori's recall, summary, compaction, augmentation, feedback and quota tools to keep context across sessions.
mozilla-ai/cq
Queries a shared knowledge store before acting, proposes newly discovered insights, and confirms or flags existing entries, so agents stop rediscovering the same failures.
radimsem/remindb
Guides an agent writing to a remindb memory server: structured notes go in as files parsed into a node tree, single text facts go in through MemoryWrite.
radimsem/remindb
Covers the read-side tools of the remindb MCP server, a SQLite-backed agent memory, for orienting, searching, resyncing and tracing relations.
radimsem/remindb
Adds a new row to remindb's token-savings benchmark table by writing a scenario function that measures the naive shell-tool token cost against the remindb tool-call cost for the same task.
radimsem/remindb
Adds a new Go fuzz target to remindb following its seed-corpus discipline: one target per logical surface, discovered automatically by its FuzzXxx function name.
radimsem/remindb
Explains how to add an end-to-end test scenario to remindb, choosing between a direct API test and an MCP test and using the shared helpers and fixtures.
radimsem/remindb
Walks through adding a new file format to remindb's Go parser package: the parser file, the ParseBytes case, table tests and fuzz seeds.
Works with
Categories
Checklist for adding a new Memory-prefixed tool to remindb's Go MCP server: tool file, registration, test, skill docs, plus the locking and logging rules. Each tool is a file in pkg/mcp/tools, written as a method on the Deps type that takes a typed input struct, calls into the Store, Engine or Tracker and returns a call result with text content.go using the mcptest environment, and an update to the remind or memorize skill's tool inventory.
Add an MCP Tool to remindb fits situations like: exposing a new capability to MCP clients in remindb; registering a new MemoryXxx tool in registerTools; deciding whether a new tool needs to take the store lock; adding tests and skill inventory entries for a new tool.
Run `npx skills add radimsem/remindb --skill add-mcp-tool -a claude-code`. Or copy the skill folder (.claude/skills/add-mcp-tool in radimsem/remindb) into .claude/skills/add-mcp-tool in your project. Claude Code loads it when a task matches its description.
Run `npx skills add radimsem/remindb --skill add-mcp-tool -a codex`. Or copy the skill folder (.claude/skills/add-mcp-tool in radimsem/remindb) into .agents/skills/add-mcp-tool in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add radimsem/remindb --skill add-mcp-tool -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-mcp-tool, .gemini/skills/add-mcp-tool, .github/skills/add-mcp-tool and .opencode/skills/add-mcp-tool in your project.
SKILL.md names no scripts, command-line tools or credentials: Add an MCP Tool to remindb is instructions for the agent only. Our summary lists: A checkout of the remindb repository and a Go toolchain.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Add an MCP Tool to remindb is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.1k tokens (SKILL.md is roughly 8.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Add an MCP Tool to remindb: Local Dev (SmilyOrg/photofield, 608 stars), MemPalace Setup and Operation (MemPalace/mempalace, 59k stars), agentmemory Setup and Diagnostics (rohitg00/agentmemory, 29k stars) and Qmd (breferrari/obsidian-mind, 5k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
radimsem (a GitHub user) maintains it in radimsem/remindb, which has 129 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on August 3, 2026.
Source: radimsem/remindb on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.