MCP Server Builder
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
Tune the PhoneBlock diagnostics log analysis — inspect aggregated log signatures, find noise / signature fragmentation / PII leaks, and propose, audit and promote scrub rules (and detection rules)…
$ npx skills add haumacher/phoneblock --skill diag-tuning -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install haumacher/phoneblock diag-tuning --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/haumacher/phoneblock.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/diag-tuning .claude/skills/diag-tuning && 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 "diag-tuning" agent skill from https://github.com/haumacher/phoneblock/tree/master/.claude/skills/diag-tuning into .claude/skills/diag-tuning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diag-tuning", 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/haumacher/phoneblock/tree/master/.claude/skills/diag-tuningType 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 haumacher/phoneblock --skill diag-tuning -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install haumacher/phoneblock diag-tuning --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/haumacher/phoneblock.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/diag-tuning .agents/skills/diag-tuning && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "diag-tuning" agent skill from https://github.com/haumacher/phoneblock/tree/master/.claude/skills/diag-tuning into .agents/skills/diag-tuning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diag-tuning", 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 haumacher/phoneblock --skill diag-tuning -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install haumacher/phoneblock diag-tuning --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/haumacher/phoneblock.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/diag-tuning .cursor/skills/diag-tuning && 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 "diag-tuning" agent skill from https://github.com/haumacher/phoneblock/tree/master/.claude/skills/diag-tuning into .cursor/skills/diag-tuning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diag-tuning", 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/haumacher/phoneblock.git --path .claude/skills/diag-tuning--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 haumacher/phoneblock --skill diag-tuning -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install haumacher/phoneblock diag-tuning --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/haumacher/phoneblock.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/diag-tuning .gemini/skills/diag-tuning && 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 "diag-tuning" agent skill from https://github.com/haumacher/phoneblock/tree/master/.claude/skills/diag-tuning into .gemini/skills/diag-tuning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diag-tuning", 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 haumacher/phoneblock diag-tuningInstalls 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 haumacher/phoneblock --skill diag-tuning -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/haumacher/phoneblock.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/diag-tuning .github/skills/diag-tuning && 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 "diag-tuning" agent skill from https://github.com/haumacher/phoneblock/tree/master/.claude/skills/diag-tuning into .github/skills/diag-tuning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diag-tuning", 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 haumacher/phoneblock --skill diag-tuning -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install haumacher/phoneblock diag-tuning --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/haumacher/phoneblock.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/diag-tuning .opencode/skills/diag-tuning && 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 "diag-tuning" agent skill from https://github.com/haumacher/phoneblock/tree/master/.claude/skills/diag-tuning into .opencode/skills/diag-tuning/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diag-tuning", 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.
diag-tuningTune the PhoneBlock diagnostics log analysis — inspect aggregated log signatures, find noise / signature fragmentation / PII leaks, and propose, audit and promote scrub rules (and detection rules)…
Diag Tuning is an agent skill from haumacher/phoneblock. Tune the PhoneBlock diagnostics log analysis — inspect aggregated log signatures, find noise / signature fragmentation / PII leaks, and propose, audit and promote scrub rules (and detection rules) over the admin API. Use when asked to look at the diagnostics results, "what rules could we add", reduce log noise, or clean up how server/dongle log lines are grouped. Backed by the local phoneblock-diag MCP server.
Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `mcp/diag_mcp.py`).
It sits in Agent Workflows, covering MCP servers. It works with Model Context Protocol. The repository describes itself as: Der Spam-Filter für Dein Telefon. The licence is GPL-3.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 9287ad7. 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.
Ships script files (Python), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
phoneblock.netFrom 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.
Diag Tuning loads about 2.1k tokens when it runs. Until then it costs about 107 tokens; SKILL.md has 1,070 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 haumacher/phoneblock at commit 9287ad7, republished under its GPL-3.0 licence (© haumacher). 1,070 words, ~2,146 tokens.
.claude/skills/diag-tuning/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.The diagnostics framework (branch diagnostics-framework, PR #473) reads the
server and dongle logs, scrubs PII, normalizes each line to a signature, and
rolls signatures up into DIAG_* aggregate tables. On top of the always-on
built-in scrubber sits a hot-editable layer of scrub rules and a set of
detection rules that can raise a user-facing help mail. This skill is the
loop for keeping that analysis honest: collapse fragmented signatures, plug PII
leaks, and turn recurring failures into actionable rules.
The test system reads the live server's logs (including server errors), so
its data is real production traffic. Base URL: https://phoneblock.net/pb-test/api.
phoneblock-diag MCPTools come from the local MCP server registered in .mcp.json
(.claude/skills/diag-tuning/mcp/diag_mcp.py, zero-dependency Python). Two
servers are registered: phoneblock-diag targets production (the default —
this is where the framework runs), and phoneblock-diag-test targets
pb-test. Each reads its own admin token from ~/.m2/settings.xml
(<password>/<passphrase>) via the server id in PHONEBLOCK_TOKEN_SERVER:
phoneblock-admin for prod, phoneblock-admin-test for test — the token never
lives in the repo. Prefer the prod tools unless you deliberately want test.
Key tools: ingest_status, list_signatures (returns a volume-ranked, compact
list), get_signature, audit_scrub, list_scrub_rules, create_scrub_rule,
set_scrub_state, list_rules, list_notifications, origin_timeline.
Always use these MCP tools — do not hand-roll curl plus token extraction from
settings.xml. The server exists precisely to hold the token and the endpoints
for you. If you find yourself writing a shell script to hit the API, stop: the MCP
is either not loaded (check .mcp.json is trusted, reload the session) or a tool
is missing something worth adding. The 1:1 mapping to `GET/POST
<base>/admin/diag/…` is documentation of what each tool does and a stopgap for
when the MCP **process itself** is down — not a routine alternative.
Per log line: scrub → normalize → signature.
Scrubber.java) runs first and masks high-confidence PII shapes
(email, sip:/tel: phone, international subscriber number). It deliberately
does not mask bare digit runs (those are HTTP/SIP codes, uptimes, byte
counts). Built-in rules are always on; LIVE DIAG_SCRUB_RULE rows layer on top.LogNormalizer) then replaces variable tokens with <N>,
<ARG>, <UUID>, <TOKEN>, <username>, etc. — this is what produces the
<N> you see in signatures. Because scrub runs before normalize, a scrub
rule matches the raw text, and its output is what gets normalized.sigId.The retained sample is scrubbed-but-not-normalized, so get_signature shows
you the real raw tail — that is what you design a rule against.
applies_to splits the scrub pass: SIGNATURE shapes only the grouping key,
SAMPLE only the retained text, BOTH shapes both.
SIGNATURE-anchored scrub rule
that collapses the tail.phoneblock%40gaerti.de, since %40 ≠ @). Fix:
a BOTH rule so it is masked in samples too.ingest_status — confirm the ingestor is live and not badly lagged.list_signatures (rank by totalEvents) — scan for noise, fragmented
families (same tag, near-identical text differing only in a tail), and PII.get_signature on a couple of members to read the
raw sample tails.re.sub over the sample strings), then run audit_scrub with
the candidatePattern against live samples — confirm it hits only the
intended tag and roughly the expected volume.create_scrub_rule — lands as DRAFT (stored, not applied). Review.set_scrub_state → LIVE (admin token required). A scrub
rule only shapes events going forward; it does not retro-merge existing
signatures.(Prevent deleting card: ).* →
$1<CARD>. Never write a bare .* that could match unrelated lines.\d+, not <N>./addresses/
in both an arg and the real path), anchor on the fuller, unique prefix.SIGNATURE when the tail is diagnostically useful and low-sensitivity (keep it
visible in samples); BOTH when the tail is PII or a possible secret.+4990) — it
would eat legit country prefixes (+49). Collapse those with a context-anchored
rule instead.DIAG_SCRUB_RULE, this skill's main focus) only mask — safe,
additive, tune grouping/anonymization.list_rules, e.g. DongleSilenceDetector) match a
signature and can raise a help mail. They carry SHADOW→LIVE state and a
kill-switch; treat promotion as outbound-affecting and confirm first.Three scrub rules run against the SERVER source, each collapsing a fragmented
family (list_scrub_rules). Scrub rules apply to new events only — they do not
retro-merge the pre-existing fragmented signatures, which linger in the ranking
and just stop growing:
diag-dyndns-host — (wrong password \(\d+ characters\): ).* → $1<DYNDNS-HOST>,
SIGNATURE (folded ~1.3k DynIpServlet events into one signature; keeps the raw
tail in samples so the fb-fb-… config-bug and which hosts are hammered stay
visible — flip to BOTH if the occasional password-in-username matters).diag-addressbook-path — (/phoneblock/contacts/addresses/)[^/]+/[^'\s]* →
$1<BOOK>/<CARD>, BOTH (~0.8k events; also masks the URL-encoded email leak).diag-address-card — (Prevent deleting card: ).* → $1<CARD>, BOTH (~0.5k).Surfaced from the logs, not yet acted on:
category=SECURITY tag
(track, don't mail): auth scanning (DB: Invalid user name ~3.7k, invalid
password, DynDNS wrong-password ~1.4k, login failures — the largest block);
DNS-server recon (DnsServer: No zone found for: version.bind. / id.server. / shadowserver.org. / . plus ~360 malformed-packet WireParseExceptions); and
SIP scanning (SipProvider: … OPTIONS sip:nm … — sipvicious/svmap).CardDavServlet: … not found: / Benutzername/ — a user
pasted the literal placeholder "Benutzername" from a setup guide into their
CardDAV client. Low volume, but a concrete docs/UX fix.Already handled (do not re-propose):
SipService: … register ab-<N> … Timeout)
are the retry churn of the existing mechanism: SipService.onRegistrationFailure
disables a bot after disableTimeout (3 days) and, for a bot that had
registered before, sends sendDiableMail. A never-registered ("temporary") bot
is disabled silently (no mail) — the one arguable gap.Goolge typo and the Google/IndexNow log flood (~62% of
events) — fixed in this PR (backoff + one-shot logging in the two index services).© haumacher, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in .claude/skills/diag-tuning of haumacher/phoneblock.
Open the folder on GitHubat commit 9287ad7
Diag Tuning 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 |
|---|---|---|---|---|---|---|
| Diag Tuning this skillhaumacher/phoneblock | 367 | — | ~2.1k | Automated safety check: Pass | GPL-3.0 | |
| MCP Server Builderanthropics/skills | 180k | 63 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| MCP Server BuildershareAI-lab/learn-claude-code | 78k | 4 repos | ~1.2k | Automated safety check: Pass | MIT | |
| MCP Integration for Pluginsanthropics/claude-plugins-official | 38k | 11 repos | ~3.1k | Automated safety check: Pass | Apache-2.0 | |
| Crush Configurationcharmbracelet/crush | 29k | — | ~3.7k | Automated safety check: Pass | Custom licence | |
| Context Mode Output Sandboxmksglu/context-mode | 26k | — | ~4.1k | Automated safety check: Pass | Custom licence |
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
shareAI-lab/learn-claude-code
Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.
anthropics/claude-plugins-official
Explains how to bundle Model Context Protocol servers in a Claude Code plugin, covering config files, stdio, SSE, HTTP and WebSocket server types, and authentication.
charmbracelet/crush
Explains how to configure the Crush coding agent with crushrc or crush.json, covering providers, models, LSPs, MCP servers, hooks, permissions and config precedence.
mksglu/context-mode
Routes large command, file, API and browser output through context-mode tools so only the needed result enters the agent's context, instead of dumping it via Bash.
warpdotdev/warp
Migrates the compatible subset of settings and global file-based MCP servers from the Warp desktop app into Warp Agent CLI without exposing credentials or state.
haumacher/phoneblock
Park a finished worktree — commit real work, delete temporary/generated leftovers, then switch to the throwaway branch named after the workspace directory and reset it to origin/master.
haumacher/phoneblock
Decode and analyze an ESP32 dongle crash report (uploaded .coredump).
haumacher/phoneblock
Start work on a GitHub issue — verify a clean workspace, read the issue, branch off the correct base (the branch where the fix will ship) as issue-<nr-<short-description, then plan the implementation.
Works with
Categories
Tune the PhoneBlock diagnostics log analysis — inspect aggregated log signatures, find noise / signature fragmentation / PII leaks, and propose, audit and promote scrub rules (and detection rules)…. Diag Tuning is an agent skill from haumacher/phoneblock. Tune the PhoneBlock diagnostics log analysis — inspect aggregated log signatures, find noise / signature fragmentation / PII leaks, and propose, audit and promote scrub rules (and detection rules) over the admin API.
Diag Tuning fits situations like: asked to look at the diagnostics results; what rules could we add; reduce log noise; clean up how server/dongle log lines are grouped.
Run `npx skills add haumacher/phoneblock --skill diag-tuning -a claude-code`. Or copy the skill folder (.claude/skills/diag-tuning in haumacher/phoneblock) into .claude/skills/diag-tuning in your project. Claude Code loads it when a task matches its description.
Run `npx skills add haumacher/phoneblock --skill diag-tuning -a codex`. Or copy the skill folder (.claude/skills/diag-tuning in haumacher/phoneblock) into .agents/skills/diag-tuning 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 haumacher/phoneblock --skill diag-tuning -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/diag-tuning, .gemini/skills/diag-tuning, .github/skills/diag-tuning and .opencode/skills/diag-tuning in your project.
Going by SKILL.md and its folder, Diag Tuning needs Python for the scripts in its folder. Our summary lists: Python 3.
SKILL.md names 1 domain. In commands or code: phoneblock.net; the agent is likely to contact it when it follows the instructions. 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.
Diag Tuning is published under the GPL-3.0 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.6k 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 Diag Tuning: MCP Server Builder (anthropics/skills, 180k stars), MCP Server Builder (shareAI-lab/learn-claude-code, 78k stars), MCP Integration for Plugins (anthropics/claude-plugins-official, 38k stars) and Crush Configuration (charmbracelet/crush, 29k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
haumacher (a GitHub user) maintains it in haumacher/phoneblock, which has 367 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 3, 2026.
Source: haumacher/phoneblock on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.