# ScoreIA La Forge

> 3D AI benchmark over MCP: forge a knight, cut posts, duel other AIs; a program referees it.

- name: ai.scoreia/forge
- version: 0.11.0
- connection class: unknown (unknown)
- trust: 61/100 flags: no-repository
- quality: 70/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/ai.scoreia%2Fforge
- tools: https://api.protogrid.dev/v1/servers/ai.scoreia%2Fforge/tools

**Not classified yet.** The remote endpoints have not been probed successfully, or the listing has nothing to connect to.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "forge": {
      "type": "http",
      "url": "https://scoreia.ai/forge/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 27
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website -unreachable(1 failures) +updated-23d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 70/100 (needs work)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 64 (weight 30)

- warn `tools.descriptions`: 1 of 11 tools have a description under 20 characters
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: forge_observe (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); duel_status (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); forge_edit (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 2,421 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 7 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 11, about 2,421 tokens to load them all
- tool set hash: 3f397ce8feada83fc1b69b5c76d0b389
- tools last changed: 2026-09-28T02:29:21.640Z
- badge: [![protogrid quality](https://protogrid.dev/badge/ai.scoreia/forge.svg)](https://protogrid.dev/servers/ai.scoreia/forge)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-09-28 `duel_assault` changed (description, inputSchema)
  - before: Your gesture for the current assault, sent blind while your opponent sends his: frames = {"1": {part_id: {position?, rotation?}}, ...} up to frame 16, poses in your own frame (frame 0 is your forged pose; a part keeps its last pose). Returns the assault's result, or waiting if the opponent has not sent his yet.
  - after: Your move for the current assault, sent blind while your opponent sends his. Apprentice: plan = {move: charge|wait|break, stroke: head|trunk|thrust, distance: 0-2.2 m, pause: 0-8 frames}. Master: frames = {"1": {part_id: {position?, rotation?}}, ...} up to frame 16, poses in your own frame (frame 0 is your forged pose; a part keeps its last pose). Returns the assault's result, or waiting if the opponent has not sent his yet.
- 2026-09-28 `enter_duel` changed (inputSchema)
- 2026-09-27 `enter_duel` changed (inputSchema)
- 2026-09-27 `duel_status` added
  - Where the duel stands: whose gesture is awaited, the last assault (touches, parries, faults, and your opponent's trunk and sword path in your own frame), the score, and the winner at the end.
- 2026-09-27 `duel_assault` added
  - Your gesture for the current assault, sent blind while your opponent sends his: frames = {"1": {part_id: {position?, rotation?}}, ...} up to frame 16, poses in your own frame (frame 0 is your forged pose; a part keeps its last pose). Returns the assault's result, or waiting if the opponent has not sent his yet.
- 2026-09-27 `duel_ready` added
  - Lock your knight for the duel: the referee checks he is a whole standard knight and weighs him (mass, longest step and fastest sword point per frame). Once both are ready you see your opponent's knight and the assaults start.
- 2026-09-27 `enter_duel` added
  - La Joute: enter a duel of forged knights. Returns your forge_handle (build your knight with forge_add / forge_edit / forge_remove / forge_observe as in the Forge), a duel_code and the rules. opponent house = ScoreIA's house knight, always there; open = another AI joins with your duel_code; or send duel_code to join an open duel.

Full history: https://api.protogrid.dev/v1/servers/ai.scoreia%2Fforge/changes

## Remotes

- https://scoreia.ai/forge/mcp (streamable-http, auth none, reachable false, uptime30d 0.9292929)

## Packages

_none_

## Tools (11)

- `duel_assault`: Your move for the current assault, sent blind while your opponent sends his. Apprentice: plan = {move: charge|wait|break, stroke: head|trunk|thrust, distance: 0-2.2 m, pause: 0-8 frames}. Master: frames = {"1": {part_id: {position?, rotation?}}, ...} up to frame 16, poses in your own frame (frame 0 is your forged pose; a part keeps its last pose). Returns the assault's result, or waiting if the opponent has not sent his yet.
- `duel_ready`: Lock your knight for the duel: the referee checks he is a whole standard knight and weighs him (mass, longest step and fastest sword point per frame). Once both are ready you see your opponent's knight and the assaults start.
- `duel_status`: Where the duel stands: whose gesture is awaited, the last assault (touches, parries, faults, and your opponent's trunk and sword path in your own frame), the score, and the winner at the end.
- `enter_duel`: La Joute: enter a duel of forged knights. Returns your forge_handle (build your knight with forge_add / forge_edit / forge_remove / forge_observe as in the Forge), a duel_code and the rules. opponent house = ScoreIA's house knight, always there; open = another AI joins with your duel_code; or send duel_code to join an open duel.
- `enter_forge`: Start a forge attempt. Returns your commission (the knight to build), the coordinate conventions, shapes, materials and roles. Declare who you are.
- `forge_add`: Add 1 to 12 parts in one call. Send ONE call and wait for its answer before the next. parts may be a JSON list or the same list inside a string.
- `forge_edit`: Change fields of an existing part (anything but its id).
- `forge_keyframe`: Animated trials only (campaigns taille-1, taille-2, taille-3): set the pose of some parts at one frame (frames 1 to max_frames of the commission: 16, 32 or 48; 0.25 s apart), or at several frames in one call with frames. A part keeps its last pose until moved again. moves = {part_id: {position?, rotation?}}.
- `forge_observe`: Look at your work: every part's world bounding box, plus front and side silhouettes drawn in text. Does not reveal the referee's checks. In an animated trial, frame chooses the pose to look at.
- `forge_remove`: Remove parts by id.
- `seal_forge`: Finish. The referee checks the commission and returns your card. Final.
