Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Identity Forge

NPM · IDENTITYFORGE · SCANNED SEP 21

Design kits, brand naming, and domain research for coding agents.

Available components

0 this week 92 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 31 of 96 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to KasayoDotCom/identityforge-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 36 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability65
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 17038 tokens (~270/item across 63 items; 63 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 99% of tool parameters carry a description.Partial
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "share_brand_project" implies "publish" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 64 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the Identity Forge MCP server?

Identity Forge runs locally as an npm package, launched with npx -y identityforge. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · identityforge

# add to Claude Code
claude mcp add io-identityforge-mcp -- npx -y identityforge
// .cursor/mcp.json
{
  "mcpServers": {
    "io-identityforge-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "identityforge"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "io-identityforge-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "identityforge"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add io-identityforge-mcp -- npx -y identityforge
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-identityforge-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "identityforge"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add io-identityforge-mcp --command npx --arg -y --arg identityforge
# ~/.hermes/config.yaml
mcp_servers:
  io-identityforge-mcp:
    command: "npx"
    args: ["-y", "identityforge"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "io-identityforge-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "identityforge"
      ]
    }
  }
}
# add to Vellum
assistant mcp add io-identityforge-mcp -t stdio -c npx -a -y identityforge
// mcp.json
{
  "mcpServers": {
    "io-identityforge-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "identityforge"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 21 Sept 26 +1
    • Stability: 0.97 → pass security
  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 15 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 14 Sept 26 +1
    • Stability: fail → pass security
  • 9 Sept 26 +1
    • Package version: 0.4.0 → 0.4.6 functional
  • 6 Sept 26 −1

    No change was recorded against any check on this day. Stability & Change Management went from 98 to 85.

  • 3 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 92 to 95.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Analysed npm/identityforge@0.4.6

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo KasayoDotCom/identityforge-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/KasayoDotCom/identityforge-mcp/.github/workflows/publish-cli.yml@refs/heads/main
Rekor log index 2479934691
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:bcfdf1d52648a7c9a742c11b7584808acef41d7439a7725b608460787e982f73fc5e69a456cabfdb2cdf3dcc8e0c8f3b16fd12f77761da1710b6d8d85

Background: How many MCP packages publish verified provenance →

Dependencies 96 packages
Packages resolved 96
Stale 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 63 exposed · ~13,669 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
reorder_brand_variations ~201

Set the order the client meets the directions in. The share page walks the variations in this order, so the first id is the direction the client sees first, which is worth deciding deliberately rather than leaving on the order you happened to attach them in. This OVERWRITES the stored order of the whole project and takes effect on the client's next view. You must list every variation in the project exactly once: a partial list is rejected with 400 and the expected id set, because writing positions for only some of them would collide with the ones left behind. Get the current ids from the response of add_brand_variation, or from a previous call to this tool, which returns the variations in their new order. Requires the kits:write scope.

NameTypeReqDescription
projectIdstringyesOwned brand project id from list_brand_projects.
variationIdsarrayyesEvery variation id in the project, exactly once, in the order the client should see them.

No output schema declared.

No examples provided.

revoke_brand_share ~192

Withdraw the client's access permanently. The /p/<token> URL stops resolving wherever it was pasted, including in an email already sent. NOT UNDOABLE: sharing again mints a new token and deliberately never the old one, so a withdrawn link can not be brought back to life. This tool requires `confirm: true`; without it nothing changes. Reach for update_brand_share with `enabled: false` instead when the client should see it again later — that is the reversible one, and it is almost always what is wanted. Revoking is for a link that leaked or an engagement that ended. The project, its variations and the comments the client already left all survive; only the access is withdrawn. Requires the kits:write scope.

NameTypeReqDescription
confirmbooleanyesMust be exactly true. Required because revoking is permanent.
projectIdstringyesOwned brand project id from list_brand_projects.

No output schema declared.

No examples provided.

search_fonts ~292

Search the Google Fonts catalog by name or category, or ask for fonts that resemble one you already have. `like` is the way to find a font by resemblance: pass a family you know and get back neighbours ranked by category, popularity, the partners they share in the curated pairing table, and whether published kits use them together, each with a `why` naming the signals that placed it. Nothing here reads a letterform, so `like` is a shortlist to confirm visually, not a verdict on how a face looks. Results are compact metadata — name, family, category, designer, popularity rank, available weights, license — and carry no font files, no CSS and no specimen. Fonts do not stand alone: use suggest_font_pairings for what to set beside one, and remember a design kit already ships a chosen heading, body and mono. Read-only and free, no key needed.

NameTypeReqDescription
categorystringNarrow to one Google Fonts category.
likestringA font family you already have, e.g. 'Inter'. Returns fonts that resemble it instead of running a name search; `query` and `category` are ignored when this is set.
limitintegerHow many to return, 1-50, default 12.
querystringMatch on font name, e.g. 'grotesk' or 'Playfair'.

No output schema declared.

No examples provided.

search_name_evidence ~111

Run up to 20 web searches you author yourself against a candidate name through Identity Forge's self-hosted SearXNG. Each query spends one account-wide monthly API unit. Returns dated raw results and nothing else: it does not score, rank, decide whether a collision is real, or constitute trademark clearance. Attach evidence and interpretation with move_name_candidates. For domain registration and DNS evidence use check_domains. Requires naming:read.

NameTypeReqDescription
tasksarrayyes1-20 independent search tasks.

No output schema declared.

No examples provided.

search_themes ~219

Return the entire catalog at once, unranked, as compact summaries carrying each kit's moodSummary, vibeTags, tags, audience, and a font and palette glimpse, so you can judge fit yourself. Despite the name it runs no server-side search: `query` is echoed back to keep your brief in context, and the ordering is neutral. Use it when the brief is subtle or cuts across categories and you would rather weigh every option than trust a ranking. Prefer list_themes when the brief maps cleanly onto a use case or search phrase, since it narrows and ranks the catalog for you and pages rather than returning everything. Read the summaries, pick one to three, then get_design_md to read the full brief or apply_theme to write it into the project. Read-only and free.

NameTypeReqDescription
querystringyesYour brief: the product, its audience, and the intended mood, e.g. 'fintech dashboard for SMBs, calm and trustworthy'. It frames your own ranking and is not sent to a matcher.

No output schema declared.

No examples provided.

set_project_context ~409

Store what the product is, so every later proposal is grounded in it and you never re-send a paragraph of prose. This REPLACES the whole context: nothing is merged, so any field you leave out is deleted, not kept. That is deliberate — a merging update would let you drop a surface from the list and silently keep the old one — but it means the safe way to edit is get_project_context first, then send the whole object back with your change applied. `product` is the only required field and must be a real sentence rather than a label; a description under 12 characters is refused, because a proposal built on one reads as grounded while being generic. Every string is bounded and an over-long field is refused by name rather than truncated, so nothing is silently cut. Requires the kits:write scope; reading needs only kits:read.

NameTypeReqDescription
audiencestringWho uses it.
avoidstringDirections already ruled out, in the user's own words. "We tried playful and customers hated it" is worth more here than any other field.
constraintsstringWhat the design must respect: an accessibility target, a parent brand, an existing component library, a locale, a regulator.
industrystringIndustry id from the discovery vocabulary.
moodsarrayMood ids from the discovery vocabulary; the feel being aimed at.
productstringyesWhat the product does, in a sentence or two. The one field a proposal cannot be specific without.
projectIdstringyesOwned brand project id from list_brand_projects.
stackobjectWhat the brand has to be implemented in. Free text, so an unrecognised stack is read by the model rather than rejected.
surfacesarrayThe screens the product has. This is what narrows candidates: a kit judged unfit for every surface is not a candidate. An empty list is honest and common early on.

No output schema declared.

No examples provided.

share_brand_project ~192

Publish a project to a client and return the full /p/<token> URL to send them. The page is read-only, serves only this project's kits, and lets the client cycle the variations and leave comments without an account. Anyone holding the link can open it, so set a password for sensitive work. Calling it again returns the existing link unchanged unless you pass rotate, which mints a new token and permanently breaks any link already sent. Add the variations before sharing, since the client sees whatever is attached at the moment they open it. Requires the kits:write scope.

NameTypeReqDescription
passwordstringPassword the client must enter. Set one when the work is confidential.
projectIdstringyesOwned brand project id from list_brand_projects.
rotatebooleanMint a new token, invalidating the previous link. Use it when a link leaked, not to fetch the existing URL.

No output schema declared.

No examples provided.

similar_themes ~186

Find published kits close to one you already have, ranked by palette proximity, shared tags, and audience. Use it when the user likes a direction but wants options, or when a candidate is nearly right and you want neighbours to compare. It needs an existing slug, so start from list_themes or search_themes if you do not have one yet. Returns compact summaries with a similarity score; judge the actual fit yourself, since proximity in palette and tags is a starting point rather than a verdict. Read-only and free, and it lists Pro kits without exposing their contents.

NameTypeReqDescription
limitintegerHow many to return, 1-10, default 4.
slugstringyesPermanent id or slug of the kit to find neighbours for. Prefer the id: it never moves, while a slug can be renamed and a retired slug keeps resolving through an alias.

No output schema declared.

No examples provided.

suggest_font_pairings ~207

Heading, body and mono faces that work together. Called with no arguments it returns the curated table, each entry carrying the label a person would recognise it by, such as 'Modern tech' or 'Quiet luxury'. Called with a family it answers what goes beside that one: the curated entries naming it, then category-contrast suggestions for the cases the table does not cover. `role` says which slot the family occupies; omit it and both are searched. The suggestions are contrast rules and are not ranked by quality, so read them as candidates. A design kit already carries a chosen trio, so reach for this when composing typography outside a kit or when a user has one fixed face. Read-only and free, no key needed.

NameTypeReqDescription
familystringA font family the user is committed to, e.g. 'Fraunces'. Omit for the whole curated table.
rolestringWhich slot `family` occupies. Ignored without a family.

No output schema declared.

No examples provided.

update_brand_share ~217

Change an existing client link WITHOUT reissuing it. `enabled: false` pauses it, so the client sees nothing until you resume; `password` sets one after the fact, and `null` removes it. The token is untouched, so a link already with the client starts working again the moment you resume. This is the tool to reach for when work is mid-revision and the client should not be looking yet, or when you shared something before realising it was confidential. It takes effect immediately for anyone holding the URL, including a client with the page already open. A project with no share yet answers 404: create one with share_brand_project first. Requires the kits:write scope.

NameTypeReqDescription
enabledbooleanfalse pauses the link, true resumes it. Omit to leave it as it is.
passwordSet the client's password, or null to remove the protection entirely. Omit to leave it as it is.
projectIdstringyesOwned brand project id from list_brand_projects.

No output schema declared.

No examples provided.

update_brand_variation ~323

Edit one brand proposal already attached to a project, in place. This OVERWRITES the stored variation, and the client sees the new version the moment they next load the share link, including a client who has the page open right now, so treat it as publishing rather than drafting. Send only the fields that move; passing null for brandName, domain, label or notes clears that field rather than leaving it. Changing kitSlug repoints the proposal at a different design kit, which re-checks that you can resolve that kit and that a Pro kit has an entitled key behind it. Use it to act on client feedback from list_client_comments without making the client re-review a whole new set of directions. Add a new direction with add_brand_variation instead when the old one should stay on the board. Requires the kits:write scope.

NameTypeReqDescription
brandNameNew brand name to display, or null to clear it.
domainNew domain to display, or null to clear it.
kitSlugstringRepoint the proposal at this kit: your own, a catalog kit, or another user's public kit.
labelNew short label the client sees, e.g. 'Bold direction', or null to clear it.
notesNew rationale shown alongside it, or null to clear it.
projectIdstringyesOwned brand project id from list_brand_projects.
variationIdstringyesId of a variation in that project, as returned by add_brand_variation or reorder_brand_variations.

No output schema declared.

No examples provided.

update_theme ~466

Edit a design kit you already saved, in place. This OVERWRITES the stored kit without asking: the slug, id and publication state all stay the same, so everything already pointing at that kit follows the edit, including brand variations that reference it, any client share link that serves it, and a repo that installed its registry entry. The overwrite itself has no undo, but it is recorded: every save mints a version, so the state you replaced stays readable through list_kit_versions and get_kit_version, and diff_kit_versions shows exactly what your edit moved. Reach for remix_theme instead when you want the original left alone, which is usually the right call while you are still exploring directions; use this one when the kit is the brand and the brand has genuinely changed. It only edits kits saved under your key. A catalog kit, another user's kit, or an unknown slug all return 404 alike. `kit` is deep merged over the stored payload, so you state only what moves and everything else survives, and `overrides` applies on top of that merge. The one thing you cannot change is the slug itself: it is the kit's public handle and moving it would break every link already using it, so a payload carrying a different slug is rejected with 400 rather than quietly ignored. Pass `expectedUpdatedAt` from the last read to get a 409 instead of silently overwriting a change someone else made in between; the 409 body carries the current marker so you can re-read, reapply and retry. Requires the kits:write scope.

NameTypeReqDescription
expectedUpdatedAtstringThe updatedAt you last read for this kit. Pass it to reject the write with 409 if the kit changed meanwhile.
kitobjectPartial kit JSON, deep merged over the stored kit. Unmentioned fields are kept. A `slug` different from the kit's own is rejected.
namestringNew display name. Omit to leave the name unchanged.
overridesobjectToken, color, font and facet writes applied on top of the merged kit.
slugstringyesPermanent id or slug of a kit saved under your own key. Catalog and other users' kits are not editable.

No output schema declared.

No examples provided.

whoami ~167

Your plan, the scopes this key holds and the ones it lacks, how much of the monthly quota is left, your AI credit balance, and how many saved-kit slots remain. Call it before promising a user something the key cannot deliver: every one of these limits is otherwise discoverable only by hitting it, as a 403 for a missing scope or a locked Pro kit, a 429 for quota, a 402 for credits, or a refused save at the free tier's kit cap. This call is free. It spends no quota units and no AI credits, and it is deliberately never refused for being over quota, so it still answers after a 429 has already happened and is safe to call first. Any valid key may read its own entitlements, whatever scopes it holds.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

Common questions

What is the Identity Forge MCP server?

Identity Forge is an MCP server listed in the public MCP registry as io.identityforge/mcp. Design kits, brand naming, and domain research for coding agents. This page covers its npm package (identityforge).

Is the Identity Forge MCP server safe to use?

Identity Forge scores 92 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Identity Forge MCP server expose?

Identity Forge exposes 63 tools: list_themes, list_image_directions, get_image_direction, list_interface_styles, get_interface_style, and 58 more. Their descriptions and schemas cost roughly 13,669 tokens of context every time the server is loaded.

Is the Identity Forge MCP server still maintained?

Identity Forge is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Identity Forge MCP server under?

Identity Forge declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.