Agent skill

Pybert MCP

by capn-freako in capn-freako/PyBERT

Drive PyBERT's MCP server to run headless serial-link BER simulations, read/write configuration, browse saved results, and inspect IBIS-AMI models, without opening the GUI.

BSD-3-ClauseAuto-check passedAgent Workflows

Install Pybert MCP

skills CLI
$ npx skills add capn-freako/PyBERT --skill pybert-mcp -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install capn-freako/PyBERT pybert-mcp --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/capn-freako/PyBERT.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/pybert-mcp .claude/skills/pybert-mcp && rm -rf skills-src

Use ~/.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/

Facts

Skill name
pybert-mcp
GitHub stars
150
Token cost
~1.6k tokens
SKILL.md length
729 words
Files
1
Skills in repo
1
Repo updated
First seen
Licence
BSD-3-Clause

At a glance

Drive PyBERT's MCP server to run headless serial-link BER simulations, read/write configuration, browse saved results, and inspect IBIS-AMI models, without opening the GUI.

  • Works in 4 steps: Configuration — get_default_config /… → Running a simulation — run_simulation → Browsing saved results —… → …
  • Asked to run a PyBERT simulation
  • SKILL.md covers Prerequisites, 1. Configuration —…, 2. Running a simulation —… and 3. Browsing saved results —…, plus 3 more sections
  • Calls uv

What it does

Pybert MCP is an agent skill from capn-freako/PyBERT. Drive PyBERT's MCP server to run headless serial-link BER simulations, read/write configuration, browse saved results, and inspect IBIS-AMI models, without opening the GUI. Use when asked to run a PyBERT simulation, tune Tx/Rx/channel/CTLE/DFE settings, evaluate link performance (BER, jitter), compare configurations, or introspect an IBIS/AMI file.

Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Agent Workflows, covering MCP servers. It works with Model Context Protocol and Python. The repository describes itself as: Serial communication link bit error rate tester simulator, written in Python. The licence is BSD-3-Clause.

When your agent uses it

  • Asked to run a PyBERT simulation
  • Tune Tx/Rx/channel/CTLE/DFE settings
  • Evaluate link performance (BER
  • Compare configurations

Example prompts

  • “/pybert-mcp”

Requirements

  • Python 3
  • Pre-approved tools (allowed-tools): mcp__pybert__get_default_config, mcp__pybert__get_config, mcp__pybert__set_config, mcp__pybert__run_simulation, mcp__pybert__inspect_results_file, mcp__pybert__list_ibis_models, mcp__pybert__inspect_ibis_model

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Configuration — get_default_config / get_config / set_config
  2. Running a simulation — run_simulation
  3. Browsing saved results — inspect_results_file
  4. IBIS-AMI introspection — list_ibis_models / inspect_ibis_model

What it can do on your machine

Read from SKILL.md and the folder at commit dee27ab. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • mcp__pybert__get_default_config
    • mcp__pybert__get_config
    • mcp__pybert__set_config
    • mcp__pybert__run_simulation
    • mcp__pybert__inspect_results_file
    • mcp__pybert__list_ibis_models
    • mcp__pybert__inspect_ibis_model

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • uv

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use uv, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Pybert MCP loads about 1.6k tokens when it runs. Until then it costs about 90 tokens; SKILL.md has 729 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~90
When it runs · the whole SKILL.md, loaded when a task matches
~1.6k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from capn-freako/PyBERT at commit dee27ab, republished under its BSD-3-Clause licence (© capn-freako). 729 words, ~1,556 tokens.

Download SKILL.mdSave it as .claude/skills/pybert-mcp/SKILL.md (or your agent's skills folder).
name
pybert-mcp
description
Drive PyBERT's MCP server to run headless serial-link BER simulations, read/write configuration, browse saved results, and inspect IBIS-AMI models, without opening the GUI. Use when asked to run a PyBERT simulation, tune Tx/Rx/channel/CTLE/DFE settings, evaluate link performance (BER, jitter), compare configurations, or introspect an IBIS/AMI file.
allowed-tools
mcp__pybert__get_default_config, mcp__pybert__get_config, mcp__pybert__set_config, mcp__pybert__run_simulation, mcp__pybert__inspect_results_file, mcp__pybert__list_ibis_models, mcp__pybert__inspect_ibis_model

PyBERT MCP

Seven tools, registered as mcp__pybert__* (server defined in .mcp.json, implementation in src/pybert/mcp/server.py). Every call constructs a fresh, isolated PyBERT instance server-side — there is no session state between calls, and no shared cache. Whatever settings you want in effect for a given run_simulation (or set_config) call must be present in the config dict you pass to that call.

Prerequisites

  • The server needs the mcp extra installed: uv sync --extra mcp. If it isn't, tool calls will fail at the transport level (the server process itself exits with a clear "MCP support requires: pip install 'pipbert[mcp]'" message if invoked directly, but from inside a session that just looks like the server failing to start — tell the user to run uv sync --extra mcp if that happens).
  • File paths are resolved relative to the server process's working directory, which is this repo's root (set by .mcp.json) — not the user's shell cwd, not this skill's directory. Always pass repo-relative paths (e.g. "models/ibisami/example_rx.ibs"), matching how paths are used throughout this repo's own tests and examples (tests/test_mcp.py, examples/mcp_client.py).

1. Configuration — get_default_config / get_config / set_config

  • Always start from a full config dict — get_default_config() or get_config(config_file) — never hand-build one. It has ~88 keys; real names include bit_rate, nbits, eye_bits, tx_taps, rx_bw, peak_mag, rx_use_viterbi, use_dfe. Don't guess a key name; read it off the dict you just fetched.
  • Both set_config and run_simulation validate keys strictly: an unrecognized key (e.g. a typo like "bit_rat") raises an error naming the bad key(s). That's intentional — treat it as "you used a wrong key name," not as a bug to route around.
  • set_config(overrides, out_file, base_config_file=None) layers overrides onto base_config_file (or the defaults) and writes the result to out_file as YAML — it does not run a simulation. Use it to persist a tuned configuration for later use with the GUI (pybert -c out_file) or CLI (pybert sim out_file).

2. Running a simulation — run_simulation

run_simulation(config, results_file=None) runs headless and returns scalar metrics directly: status, total_perf, jitter_perf, n_errs_dfe, n_errs_viterbi, chnl_dly, isi_dfe, dcd_dfe, pj_dfe, rj_dfe, perf_info (an HTML table), jitter_info.

  • Checking success: status is a free-text log message, not a boolean — don't treat any non-empty string as success. On success it ends as "Ready.". On failure it starts with "Exception: ..." or reads "Aborted Simulation". Check for those.
  • n_errs_viterbi == -1 means Viterbi/FEC decoding wasn't enabled for that run (rx_use_viterbi was false) — it's a sentinel, not an error.
  • For tuning/comparison loops, shrink nbits/eye_bits first (e.g. 1000/500) — full-length runs are much slower and unnecessary until you've converged on settings worth a final, full-length confirmation run.
  • Only pass results_file when you actually need inspect_results_file afterward — it triggers extra plot-data population and file I/O a metrics-only call doesn't need.
Show full SKILL.md (291 more words)Show less

3. Browsing saved results — inspect_results_file

Only works on files written by run_simulation(..., results_file=...) (or pybert sim). It reports {array_name: {shape, dtype, min, max, mean}} per waveform (impulse/step/pulse responses, etc.) — never raw samples, and never scalar performance metrics (those exist only live, via run_simulation's return value — they aren't persisted in .pybert_data files). If you need actual sample values, there is no tool for that here; say so rather than inventing numbers.

4. IBIS-AMI introspection — list_ibis_models / inspect_ibis_model

Two-step, always in this order:

  1. list_ibis_models(ibis_file) — confirms the file parses (parsing_errors == "Success!") and lists valid components/models names.
  2. inspect_ibis_model(ibis_file, model_name) — pass an exact name from step 1's models list.

inspect_ibis_model returns null for zout/slew on Rx-only models and for zin on Tx-only models — that's expected (those are driver-only / receiver-only properties), not missing data. ami_files lists DLL/SO + .ami paths per platform/bitness; this tool never executes the AMI model itself.

Common workflows

Tune a parameter and compare performance:

  1. get_default_config() (or get_config on an existing file) → cfg.
  2. Shrink cfg["nbits"] / cfg["eye_bits"] for speed.
  3. For each candidate setting: mutate the relevant key(s) on a copy of cfg (e.g. cfg["rx_bw"], cfg["peak_mag"], cfg["tx_taps"]) → run_simulation(cfg) → compare total_perf / jitter_perf across variants, checking status on each.
  4. Once satisfied, run once more at full-length nbits/eye_bits for the number you actually report, optionally with results_file set. Report the numbers a tool call actually returned — never estimate or interpolate a result.

Persist a tuned configuration: set_config(overrides, out_file) once you've found values worth keeping.

Pitfalls

  • Don't fabricate simulation numbers or waveform contents. If a call errors or a result looks odd, report it as-is rather than smoothing it over.
  • Config-key validation errors are the server telling you the key doesn't exist — fix the key name using the dict from get_default_config/get_config, don't retry the same key.

© capn-freako, BSD-3-Clause. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/pybert-mcp of capn-freako/PyBERT.

Open the folder on GitHubat commit dee27ab

Compare with similar skills

Pybert MCP 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.

Pybert MCP compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Pybert MCP this skillcapn-freako/PyBERT150—~1.6kAutomated safety check: PassBSD-3-Clause
MCP Server Builderanthropics/skills180k63 repos~2.3kAutomated safety check: PassApache-2.0
MCP Server BuildershareAI-lab/learn-claude-code78k5 repos~1.2kAutomated safety check: PassMIT
MemPalace Setup and OperationMemPalace/mempalace59k—~2.2kAutomated safety check: PassMIT
FastmcpTommy-yw/RunbookHermes5463 repos~2.1kAutomated safety check: PassMIT
Fastmcp Client CLIPrefectHQ/fastmcp28k—~823Automated safety check: PassApache-2.0

Similar skills

  • MCP Server Builder

    anthropics/skills

    Official

    Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.

    180k GitHub starsUsed in 63 repos~2.3k tokens
    Agent WorkflowsAuto-check passed
  • MCP Server Builder

    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.

    78k GitHub starsUsed in 5 repos~1.2k tokens
    Agent WorkflowsAuto-check passed
  • 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.

    59k GitHub stars~2.2k tokensUpdated yesterday
    Agent WorkflowsAuto-check passed
  • Fastmcp

    Tommy-yw/RunbookHermes

    Build, test, inspect, install, and deploy MCP servers with FastMCP in Python.

    546 GitHub starsUsed in 3 repos~2.1k tokens
    Agent WorkflowsAuto-check passed
  • Fastmcp Client CLI

    PrefectHQ/fastmcp

    Query and invoke tools on MCP servers using fastmcp list and fastmcp call.

    28k GitHub stars~823 tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Migrate To Archestra

    archestra-ai/archestra

    Migrate an existing agentic PoC/pilot (Claude Code project files, MCP configs, hooks, local tools, openclaw config, or similar hand-rolled setup artifacts) into an Archestra instance.

    4.4k GitHub stars~2.6k tokensUpdated today
    Agent WorkflowsAuto-check passed

Categories

Questions about Pybert MCP

What does Pybert MCP do?

Drive PyBERT's MCP server to run headless serial-link BER simulations, read/write configuration, browse saved results, and inspect IBIS-AMI models, without opening the GUI. Pybert MCP is an agent skill from capn-freako/PyBERT. Drive PyBERT's MCP server to run headless serial-link BER simulations, read/write configuration, browse saved results, and inspect IBIS-AMI models, without opening the GUI.

When should I use Pybert MCP?

Pybert MCP fits situations like: asked to run a PyBERT simulation; tune Tx/Rx/channel/CTLE/DFE settings; evaluate link performance (BER; compare configurations.

How do I install Pybert MCP in Claude Code?

Run `npx skills add capn-freako/PyBERT --skill pybert-mcp -a claude-code`. Or copy the skill folder (.claude/skills/pybert-mcp in capn-freako/PyBERT) into .claude/skills/pybert-mcp in your project. Claude Code loads it when a task matches its description.

How do I install Pybert MCP in Codex?

Run `npx skills add capn-freako/PyBERT --skill pybert-mcp -a codex`. Or copy the skill folder (.claude/skills/pybert-mcp in capn-freako/PyBERT) into .agents/skills/pybert-mcp in your project. Codex loads it when a task matches its description.

Can I use Pybert MCP in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add capn-freako/PyBERT --skill pybert-mcp -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pybert-mcp, .gemini/skills/pybert-mcp, .github/skills/pybert-mcp and .opencode/skills/pybert-mcp in your project.

What does Pybert MCP need to run?

Going by SKILL.md and its folder, Pybert MCP needs the command-line tools its instructions call (uv). Our summary lists: Python 3. Its frontmatter pre-approves these tools: mcp__pybert__get_default_config, mcp__pybert__get_config, mcp__pybert__set_config, mcp__pybert__run_simulation, mcp__pybert__inspect_results_file, mcp__pybert__list_ibis_models, mcp__pybert__inspect_ibis_model.

Does Pybert MCP access the network?

SKILL.md contains no URLs. Its commands use uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Pybert MCP safe to install?

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.

What licence does Pybert MCP use?

Pybert MCP is published under the BSD-3-Clause licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Pybert MCP use?

About 1.6k tokens (SKILL.md is roughly 6.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Pybert MCP?

Skills that share tags, products or a category with Pybert MCP: MCP Server Builder (anthropics/skills, 180k stars), MCP Server Builder (shareAI-lab/learn-claude-code, 78k stars), MemPalace Setup and Operation (MemPalace/mempalace, 59k stars) and Fastmcp (Tommy-yw/RunbookHermes, 546 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Pybert MCP?

capn-freako (a GitHub user) maintains it in capn-freako/PyBERT, which has 150 GitHub stars. The repository was last updated on October 1, 2026.

Source: capn-freako/PyBERT on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.