Skip to content
SKILLS
MCP ServerPublisher identity verifiedNo findings from static checks

@spboucher/pangram-experiment-mcpv1.0.0

MCP server for text-revision experiments that record the Pangram detector score as an observed outcome: frozen editorial plan, one submission per step, a real evaluation of every version, preservation checks, full history, chart and report.

  • downloadable
  • installable
  • executable
Version
1.0.0
Published
Nov 10, 2026
Licence
MIT
Archive
53 kB
Files
17
Transport
stdio
Tools
10

Install

Register the local server

claude mcp add --transport stdio --env PANGRAM_API_KEY=<value> --env PANGRAM_EXPERIMENT_ROOT=<value> --env PANGRAM_MODEL=<value> --env PANGRAM_TIMEOUT_SECONDS=<value> --env PANGRAM_RETRY_ATTEMPTS=<value> --env PANGRAM_EVAL_BUDGET=<value> --env PANGRAM_BASE_URL=<value> pangram-experiment-mcp -- node server.mjs
.mcp.json (project scope)
{
  "mcpServers": {
    "pangram-experiment-mcp": {
      "command": "node",
      "args": [
        "server.mjs"
      ],
      "env": {
        "PANGRAM_API_KEY": "${PANGRAM_API_KEY}",
        "PANGRAM_EXPERIMENT_ROOT": "${PANGRAM_EXPERIMENT_ROOT}",
        "PANGRAM_MODEL": "${PANGRAM_MODEL}",
        "PANGRAM_TIMEOUT_SECONDS": "${PANGRAM_TIMEOUT_SECONDS}",
        "PANGRAM_RETRY_ATTEMPTS": "${PANGRAM_RETRY_ATTEMPTS}",
        "PANGRAM_EVAL_BUDGET": "${PANGRAM_EVAL_BUDGET}",
        "PANGRAM_BASE_URL": "${PANGRAM_BASE_URL}"
      }
    }
  }
}

Environment variables — set locally, never sent to the registry

VariableRequiredPurpose
PANGRAM_API_KEYsecretyesPangram API key. Read from the environment, sent only to Pangram, never stored or shown.
PANGRAM_EXPERIMENT_ROOToptionalDirectory holding .pangram-experiments/ (default: working directory). Every file path must resolve inside it.
PANGRAM_MODELoptionalModel requested from Pangram (default: pangram-4).
PANGRAM_TIMEOUT_SECONDSoptionalTimeout of each HTTP request (default: 30).
PANGRAM_RETRY_ATTEMPTSoptionalAttempts per request on HTTP 429, 5xx or network failure (default: 3).
PANGRAM_EVAL_BUDGEToptionalStandalone evaluations allowed per 24 hours (default: 20).
PANGRAM_BASE_URLoptionalEndpoint override for tests or a proxy: https, or http on 127.0.0.1 / localhost only.
More steps
  1. 1Set the required environment variables locally

    PANGRAM_API_KEY, PANGRAM_EXPERIMENT_ROOT, PANGRAM_MODEL, PANGRAM_TIMEOUT_SECONDS, PANGRAM_RETRY_ATTEMPTS, PANGRAM_EVAL_BUDGET, PANGRAM_BASE_URL — configured on your machine only; never sent to the registry.

  2. 2Optional: download the listing's source archive for review

    skills download @spboucher/pangram-experiment-mcp@1.0.0
  • Declared permissions: network, filesystem:read, filesystem:write, env.
  • This server runs locally on your machine with your user's privileges. Review the source before running it; the registry does not execute or host it.

Installing only copies or configures. Nothing is executed for you. The Skills CLI verifies the checksum before writing files.

Documentation

pangram-experiment-mcp

An MCP server for one kind of experiment: revise a text step by step, each step for an editorial objective fixed in advance, and record what the Pangram AI-text detector reports for every version.

The detector score is an observed outcome. The server is built so that it cannot quietly become a target:

  • the editorial plan is frozen and hashed before any score exists, and an objective that mentions detection is refused;
  • each step takes exactly one revised text, which is recorded and evaluated whatever the result;
  • every score comes from a real evaluation of exactly the stored text, and a text is scored once;
  • standalone evaluations are closed while an experiment is running;
  • the experiment stops if a revision loses factual content.

The server calls no language model. The agent writes the revisions. This is a measuring instrument: it is not meant for, and does not help with, making a text pass a detector.

What leaves your machine

Each evaluation sends the full text to Pangram, a third-party service, with your API key, and is billed to that key. Do not submit confidential text. Nothing is sent anywhere else: no telemetry, no other host. Requests carry a generic User-Agent (pangram-experiment/1.0). The key is read from the environment; it is never written to a file, a log or a tool answer, and it is redacted from error bodies.

Requirements

Node.js 20 or later, and a Pangram API key.

Set up

shell
skills download @spboucher/pangram-experiment-mcp --extract ./pangram-experiment-mcp
cd pangram-experiment-mcp && npm ci --omit=dev

Claude Code:

shell
claude mcp add --transport stdio pangram-experiment \
  --env PANGRAM_API_KEY=<your key> \
  --env PANGRAM_EXPERIMENT_ROOT=/absolute/path/to/project \
  -- node /absolute/path/to/pangram-experiment-mcp/server.mjs

Codex (~/.codex/config.toml):

toml
[mcp_servers.pangram-experiment]
command = "node"
args = ["/absolute/path/to/pangram-experiment-mcp/server.mjs"]
env = { PANGRAM_API_KEY = "<your key>", PANGRAM_EXPERIMENT_ROOT = "/absolute/path/to/project" }

Cursor (.cursor/mcp.json):

json
{ "mcpServers": { "pangram-experiment": { "type": "stdio", "command": "node", "args": ["/absolute/path/to/pangram-experiment-mcp/server.mjs"], "env": { "PANGRAM_API_KEY": "<your key>", "PANGRAM_EXPERIMENT_ROOT": "/absolute/path/to/project" } } } }

These snippets follow the sibling packages; this server was tested with the official MCP client over stdio, not registered in each of these clients.

Environment

VariableDefaultPurpose
PANGRAM_API_KEYnone (required for evaluations)Pangram key
PANGRAM_EXPERIMENT_ROOTworking directorywhere .pangram-experiments/ lives; files are read only inside it
PANGRAM_MODELpangram-4model requested; fixed in each experiment's design
PANGRAM_TIMEOUT_SECONDS30per HTTP request
PANGRAM_RETRY_ATTEMPTS3attempts on HTTP 429, 5xx or network failure
PANGRAM_EVAL_BUDGET20standalone evaluations per 24 hours
PANGRAM_BASE_URLhttps://text.external-api.pangram.comoverride for tests or a proxy: https, or http on 127.0.0.1 / localhost only

Tools

ToolNetworkWhat it does
pangram_statusnoKey set or not (never the key), endpoint, model, root, budgets
experiment_initnoStore the original; freeze the plan, key facts, thresholds and budget
experiment_baselinePangramEvaluate the original: iteration 0
experiment_nextnoNext objective, current text, what to preserve; shows no score
experiment_submitPangramRecord the one revision of the step with its assessment, measure preservation, evaluate
experiment_rescorePangramRetry a failed evaluation on the same stored text
experiment_statusnoStatus, budget, one line per iteration
experiment_historynoThe frozen design and the append-only record
experiment_reportnoWrite history.json, scores.csv, score.svg, comparison.html, report.md
pangram_evaluatePangramOne budgeted evaluation outside any experiment

Order of work: experiment_init → experiment_baseline → (experiment_next → write the revision → experiment_submit) for each step → experiment_report.

What is stored

text
<root>/.pangram-experiments/<id>/
  experiment.json    the frozen design, with its hash
  history.jsonl      append-only: init, step, score, score_failed, stopped
  texts/NN.txt       the original (00) and each revision
  raw/NN.json        Pangram's raw answer for that text
  report/            the report files

Files are created with mode 0600. A step record is written before Pangram is called, so a failure leaves a step without a score, never the reverse. Editing the design or a stored text is detected by hash and stops the experiment.

Measures

For each revision the server computes, against the original and the previous version: word-set overlap (Jaccard), cosine of word counts, length ratio, and which numbers and capitalised names of the original are missing. These are lexical proxies, not a measure of meaning. Next to them it stores the agent's own assessment: six scores from 1 to 5 and a verdict on each key fact declared at the start.

The experiment stops when a key fact is judged lost, when more numbers are missing than the design allows (default: none), or when fewer than the required share of names remain (default: 80 %).

The Pangram API as used here

Verified on 2026-11-10 with real calls: POST /task with {text, model} returns a task_id (and a notice when the requested model is served by a newer one); GET /task/{id} returns stage: STAGE_INFERENCE, then STAGE_SUCCESS with fraction_ai, fraction_ai_assisted, fraction_human, labels and per-segment windows. The text echoed back can differ from the submitted one in white space; any other difference makes the server discard the result.

Not verified: failure stages, error bodies, rate limits, billing, length limits, other models, and whether the same text always gets the same result. These are handled generically: a non-success answer is kept as it came, and no score is ever produced locally.

Tests

shell
npm test                                   # 21 tests, no network
PANGRAM_API_KEY=... npm run test:live      # 1 test, 3 real evaluations of an invented text

The offline tests replace Pangram with a fake built from two recorded answers (test/fixtures/). They cover a full run, every refusal, the frozen plan, the stop rule, the budget, retries, failed and mismatched evaluations, the report files, path confinement, and the absence of the key from every file and answer. The protocol tests drive the server over stdio with the official client against a local HTTP stand-in.

Limits

  • One text per experiment, one run, objectives applied in sequence: the result describes that trajectory and supports no general or causal claim.
  • A detector score is not evidence of who or what wrote a text.
  • The server cannot see how a revision was written. It guarantees one submission per step, not that the agent ignored earlier scores.
  • The anchor check sees digits and capitalised names only. Facts in words or in lower case are protected only as declared key facts.
  • The quality scores are the revising agent's own.
  • The record is hash-checked but unsigned: someone with write access to the directory can rebuild it.
  • Tested on macOS with Node 26 only; engines allows Node 20 and later.

Licence

MIT.

Tools

10 tools · declared by the publisher
ToolWhat it does
pangram_statusWhether the key is set (never the key), endpoint, model, root, budgets; no network call
experiment_initStore the original and freeze the editorial plan, key facts and thresholds before any score exists
experiment_baselineReal Pangram evaluation of the original text, recorded as iteration 0
experiment_nextThe next objective, the current text and what must be preserved; shows no score
experiment_submitRecord the one revision of a step with its assessment, measure preservation, evaluate it with Pangram
experiment_rescoreRetry a failed evaluation on the same stored text; never re-measures a scored step
experiment_statusStatus, budget and one line per iteration with score changes and preservation measures
experiment_historyThe frozen design and the append-only record, optionally with every version of the text
experiment_reportWrite history.json, scores.csv, score.svg, comparison.html and report.md
pangram_evaluateOne budgeted evaluation of a text outside any experiment; closed while an experiment runs

Environment variables

VariableRequiredPurpose
PANGRAM_API_KEYsecretyesPangram API key. Read from the environment, sent only to Pangram, never stored or shown.
PANGRAM_EXPERIMENT_ROOToptionalDirectory holding .pangram-experiments/ (default: working directory). Every file path must resolve inside it.
PANGRAM_MODELoptionalModel requested from Pangram (default: pangram-4).
PANGRAM_TIMEOUT_SECONDSoptionalTimeout of each HTTP request (default: 30).
PANGRAM_RETRY_ATTEMPTSoptionalAttempts per request on HTTP 429, 5xx or network failure (default: 3).
PANGRAM_EVAL_BUDGEToptionalStandalone evaluations allowed per 24 hours (default: 20).
PANGRAM_BASE_URLoptionalEndpoint override for tests or a proxy: https, or http on 127.0.0.1 / localhost only.

Files

17 files · 181 kB unpacked

Select a file to preview it. Files are shown as plain text and never executed.

Security & permissions

Declared permissions

  • network
  • filesystem:read
  • filesystem:write
  • env

Static checks

No advisory findings from static-1.0.0 on Nov 10, 2026. 10 informational notes.

Static checks are advisory. They never certify that a package is safe. Compatibility entries are publisher claims unless marked verified.

Compatibility

  • claude-code · claimed
  • codex · claimed
  • cursor · claimed
  • generic-mcp · claimed

Versions

1 release · immutable
VersionPublishedSizeSHA-256State
1.0.0latestNov 10, 202653 kBb849f9620683…published

Publication history

  1. release.publish@spboucher/pangram-experiment-mcp@1.0.0by Simon-Pierre Boucher
  2. artifact.create@spboucher/pangram-experiment-mcpby Simon-Pierre Boucher
  • MCP ServerVerified publisher

    @spboucher/manuscript-audit-mcp

    MCP server for deterministic, offline audits of LaTeX and Markdown manuscripts: citations, cross-references, numbers, statistics reporting, tables, claims, style, replication statements, referee-report scaffold, version comparison.

    Latest version
    v1.0.0
    Licence
    MIT
    Updated
    4 h ago
  • MCP ServerVerified publisher

    @spboucher/xlsx-audit-mcp

    MCP server that audits Excel workbooks without Excel: errors, hard-coded numbers, broken formula patterns, circular references, controls, stale values, comparison with a reference and a rubric-based grading aid. Read-only, dependency-free reader.

    Latest version
    v1.0.0
    Licence
    MIT
    Updated
    4 h ago
  • MCP ServerVerified publisher

    @spboucher/scholarly-mcp

    MCP server for scholarly search and citation verification over Crossref, OpenAlex, arXiv and doi.org: checks that a DOI resolves and its metadata matches, audits .bib files, flags retractions, walks the citation graph.

    Latest version
    v1.0.0
    Licence
    MIT
    Updated
    4 h ago

↑↓ to navigate · enter to open · esc to close