■ Standard ouvert

bloc d’extension forge

v0.12026-05-27Brouillon · RFC ouverteGitHub →

Un bloc d’extension JSON que vous ajoutez à n’importe quel manifeste de serveur MCP, Agent Card A2A ou frontmatter SKILL.md. Ignoré par les clients qui ne le lisent pas. Il permet à Forge d’afficher sur votre annonce l’identité vérifiée de l’éditeur, les résultats de l’analyse de sécurité et les suites d’évaluation que vous invitez à exécuter.

package.json — serveur MCPn’importe quel format de manifeste
{
  "name": "my-mcp-server",
  "version": "1.0.0",

  "forge": {
    "version": "0.1",

    "publisher": {
      "verified": true,
      "verification_method": "github-collaborator-api",
      "github_login": "your-handle",
      "verified_at": "2026-05-27T14:00:00Z"
    },

    "security": {
      "scanned": true,
      "vulnerabilities": 0,
      "suspicious_scripts": false,
      "status": "clean"
    }
  }
}

Ce document n’est maintenu qu’en anglais. La version anglaise fait foi.

Structure

The forge block is a single top-level key added to your existing manifest. It has five sub-objects, four of which are implemented in v0.1 and one that is planned.

forge.versionrequiredSpec version — must be "0.1"
forge.publisherlivePublisher identity — set on claim
forge.securityliveSecurity scan results — set by Forge
forge.credentialsliveWhat a user must supply — names, never values
forge.evalsliveEval suites you invite people to run
forge.composeplannedRuntime composability hints

forge.versionrequired

The version of this spec the block conforms to. Must be "0.1" for this version.

JSON
"forge": { "version": "0.1" }

forge.publisherlive — v0.1

Publisher identity, populated automatically by Forge when you claim your listing. You can include it manually — Forge compares it against its verification records.

FieldTypeDescription
verifiedbooleantrue if Forge has verified this publisher
verification_methodstring"github-owner" · "github-collaborator-api" · "manual"
github_loginstringGitHub username of the verified publisher
verified_atdatetimeISO 8601 — when verification occurred
JSON
"publisher": { "verified": true, "verification_method": "github-collaborator-api", "github_login": "sam-rivera", "verified_at": "2026-05-27T14:30:00Z" }

forge.securitylive — v0.1

Security scan results written by Forge — not self-reported. Forge queries the OSV vulnerability database for known CVEs against the exact published version, and runs static analysis on npm lifecycle scripts for suspicious patterns.

FieldTypeDescription
scannedbooleanWhether a scan has run
scan_levelstring"base" or "verified"
last_scandatetimeISO 8601 of last scan
scanner_versionstringForge scanner version
vulnerabilitiesintegerTotal CVEs (all severities)
critical / high / moderate / lowintegerCVEs by severity
suspicious_scriptsbooleanFlagged lifecycle script patterns
statusstring"clean" · "warnings" · "critical" · "failed"
JSON
"security": { "scanned": true, "scan_level": "base", "last_scan": "2026-05-27T14:30:00Z", "scanner_version": "0.1.0", "vulnerabilities": 0, "critical": 0, "high": 0, "moderate": 0, "low": 0, "suspicious_scripts": false, "status": "clean" }

forge.evalslive

The eval suites you invite people to run against your package — id, version, a SHA-256 digest of the suite's own bytes, and where to fetch it. This block carries no results. Anyone can write "accuracy": 0.99 into their own manifest, so a number here would cost nothing to write and be worth nothing to read. What it carries instead is the commitment that makes a result checkable: exactly which cases to run.

JSON — example
"evals": { "suites": [ { "id": "forge/mcp-smoke-v1", "version": "1.0.0", "digest": "sha256:a1e906f1c653c9c08a2289b8688e4aca…", "url": "https://raw.githubusercontent.com/acme/server/main/evals/smoke.json" } ] }

The digest covers the suite's id, version, kind and cases, canonicalised and hashed — not its description or URL, so a mirror of the same suite still corroborates the original. Run forge eval <suite> <target> to compute it.

Eval resultslive

Results are not part of the manifest. They are submitted as individual runs to POST /api/v1/entries/:id/evals by forge eval --publish, and the registry stamps each one with the GitHub identity it authenticated. A run names the suite digest it ran, the exact version of your package it ran against, passed/total, latency, and a digest of its per-case outcomes.

Forge then derives how much it can stand behind. Nobody submits this — there is no request that sets it:

  • Reproduced — two or more independent accounts ran the same suite digest against the same version and agreed within two points.
  • Contested — they ran it and did not agree. Shown as a range, prominently. A disputed number tells you more than an unexamined one.
  • Unverified claim — one account has reported it, including when that account is the publisher. Displayed, and labelled as a claim.

One identity gets one vote, so re-running your own suite is not a reproduction. A run whose case count differs from the suite's is rejected outright — otherwise the cheapest route to a perfect score would be to run only the cases you pass. And eval results never affect the trust score: that score is a security rubric, and folding a metric authored by the party being measured into it would compromise the one number the registry's credibility rests on. Quality is a parallel signal, with its own badge and its own --min-accuracy filter — which only reproduced results satisfy.

forge.composeplanned — v0.2

Composability hints that let Forge build a dependency graph and run supply chain security checks across agent pipelines.

JSON — example
"compose": { "depends_on": ["ana/web-researcher", "sara/report-writer"], "can_be_called_by": ["pipeline/market-intel"] }

Usage by format

MCP server

Add forge as a top-level key in package.json:

package.json
{ "name": "my-mcp-server", "version": "1.0.0", "main": "dist/index.js", "forge": { "version": "0.1", "publisher": { "verified": false } } }

A2A Agent Card

Add forge as an extension key in agent.json:

agent.json
{ "name": "My Agent", "url": "https://example.com/agent", "version": "1.0", "forge": { "version": "0.1", "publisher": { "verified": false } } }

Skill (SKILL.md)

Add a forge key in the YAML frontmatter:

SKILL.md
--- name: code-reviewer version: 1.0.0 forge: version: "0.1" publisher: verified: false --- # Your skill prompt here

Claiming your listing

You don't need to write the forge.publisher block yourself — Forge writes it automatically when you claim your listing.

  1. Find your package in the registry
  2. Click “Claim this listing” on the package profile
  3. Sign in with GitHub — Forge checks repo access automatically
  4. Submit the claim — most are verified instantly via the GitHub collaborator API

After verification, Forge writes the forge.publisher block and displays your GitHub identity on the listing. Security scanning runs automatically on every claimed package.

Versioning

This spec follows semantic versioning:

BumpWhen
Patch (0.1.x)Clarifications, no schema changes
Minor (0.x.0)New optional fields — backwards-compatible
Major (x.0.0)Breaking changes to required fields or removed fields

The forge.version field in the block records which version of this spec the block conforms to. Clients should treat unrecognised fields as unknown and ignore them.

RFC process

This spec evolves through an open RFC process on GitHub.

  1. Open an issue describing the problem you're solving with concrete JSON examples
  2. Discussion period: 7 days for minor changes, 14 days for significant, 30 days for breaking
  3. Open a PR updating SPEC.md and forge.schema.json, referencing the issue
  4. Merge after discussion period with no unresolved objections

JSON Schema

A machine-readable JSON Schema is available for validation:

URL
https://forgeregistry.com/spec/v0.1/forge.schema.json

Use it with any JSON Schema validator. Example with ajv:

JavaScript
import Ajv from "ajv"; import schema from "./forge.schema.json" assert { type: "json" }; const ajv = new Ajv(); const validate = ajv.compile(schema); const valid = validate(yourManifest);
forge extension block spec v0.1 — Draft. Open RFC on GitHub. Feedback welcome via issues or PRs.