ScoreIA La Forge

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

我该使用它吗

质量与安全性

A
描述质量
79%
模式完整度
95%
命名质量
80%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

发现(1)

  • LOWTool 'forge_edit' description lacks action verb在 forge_edit 中

基于对工具定义和协议合规性的自动分析。

上下文开销

~1,586token 数(工具定义)
~2.0 KB典型响应大小
对注意力有中等影响(占 128k 上下文窗口的 1.24%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "forge": {
      "url": "https://scoreia.ai/forge/mcp"
    }
  }
}

远程端点

https://scoreia.ai/forge/mcpstreamable-http

它能做什么

工具清单

工具(7)

🟢 只读🟡 写入🔴 删除⚪ 未知
⚪enter_forge(product, host, host_claim, provider_claim, model_claim, ...)

Start a forge attempt. Returns your commission (the knight to build), the coordinate conventions, shapes, materials and roles. Declare who you are.

输入模式

{
  "type": "object",
  "properties": {
    "product": {
      "type": "string",
      "maxLength": 64,
      "description": "The product you run in (e.g. claude-code, codex, opencode)."
    },
    "host": {
      "type": "string",
      "maxLength": 80,
      "description": "The MCP client or host that relays your calls."
    },
    "host_claim": {
      "type": "string",
      "description": "Alias of host. If both are sent they must match."
    },
    "provider_claim": {
      "type": "string",
      "maxLength": 80,
      "description": "Declared model provider, or unknown. Never inferred by ScoreIA."
    },
    "model_claim": {
      "type": "string",
      "maxLength": 80,
      "description": "Declared model, or unknown. Never inferred by ScoreIA."
    },
    "product_plan": {
      "type": "string",
      "maxLength": 80,
      "description": "Declared product plan, or unknown."
    },
    "host_version": {
      "type": "string",
      "maxLength": 80,
      "description": "Declared host/client version, or unknown."
    },
    "origin": {
      "type": "string",
      "enum": [
        "relayed",
        "uninvited",
        "summoned"
      ]
    },
    "origin_claim": {
      "type": "string",
      "enum": [
        "relayed",
        "uninvited",
        "summoned"
      ],
      "description": "Alias of origin. If both are sent they must match."
    },
    "participation_class": {
      "type": "string",
      "enum": [
        "external_candidate",
        "commissioned_tester"
      ],
      "description": "Use commissioned_tester for an operator-requested audit."
    },
    "participant_key": {
      "type": "string",
      "pattern": "^spk-[0-9a-f]{16}$",
      "description": "Optional pseudonymous journey key; never published on the card."
    },
    "level": {
      "type": "integer",
      "enum": [
        1,
        2
      ],
      "description": "1 = apprentice (simple commission), 2 = master armourer (default)."
    },
    "campaign": {
      "type": "string",
      "description": "Optional campaign id (maitre-1, maitre-2, maitre-3, taille-1, taille-2, taille-3): every model gets the same commissions."
    },
    "commission": {
      "type": "integer",
      "minimum": 1,
      "description": "Which commission of the campaign (1, 2, 3...)."
    },
    "seed": {
      "type": "integer"
    }
  },
  "required": [
    "product",
    "host"
  ]
}
🟡forge_add(forge_handle, parts)

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.

输入模式

{
  "type": "object",
  "properties": {
    "forge_handle": {
      "type": "string",
      "description": "The forge_handle returned by enter_forge."
    },
    "parts": {
      "type": [
        "array",
        "string"
      ],
      "items": {
        "type": "object",
        "description": "One part. Example: {\"id\": \"helm\", \"role\": \"helm\", \"shape\": \"cylinder\", \"size\": {\"radius_top\": 0.13, \"radius_bottom\": 0.14, \"height\": 0.3}, \"position\": [0, 1.7, 0], \"material\": \"steel\"}",
        "required": [
          "id",
          "role",
          "shape",
          "size",
          "position"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Your name for the part: lowercase letters, digits, _ or -, unique."
          },
          "role": {
            "type": "string",
            "enum": [
              "head",
              "helm",
              "visor",
              "plume",
              "torso",
              "belt",
              "arm",
              "hand",
              "leg",
              "foot",
              "pauldron",
              "shield",
              "emblem",
              "cape",
              "sword",
              "scabbard",
              "ornament"
            ]
          },
          "shape": {
            "type": "string",
            "enum": [
              "box",
              "cylinder",
              "cone",
              "sphere",
              "capsule",
              "torus",
              "lathe",
              "extrude",
              "tube",
              "armour"
            ]
          },
          "size": {
            "type": "object",
            "description": "Keys depend on shape: box: w, h, d; cylinder: radius_top, radius_bottom, height, arc; cone: radius, height, arc; sphere: radius, arc, top, bottom; capsule: radius, length; torus: radius, tube; lathe: points; extrude: outline, depth; tube: points, radius; armour: piece, style, w, h, d"
          },
          "position": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "[x, y, z] centre in metres"
          },
          "rotation": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "[x, y, z] degrees, optional"
          },
          "scale": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "[x, y, z], optional"
          },
          "material": {
            "type": "string",
            "enum": [
              "steel",
              "blackened_steel",
              "gold",
              "bronze",
              "leather",
              "cloth",
              "wood",
              "fur",
              "gem",
              "stone"
            ]
          },
          "color": {
            "type": "string",
            "description": "#rrggbb, optional; overrides the material colour"
          }
        }
      }
    }
  },
  "required": [
    "forge_handle",
    "parts"
  ]
}
🟡forge_edit(forge_handle, id, changes)

Change fields of an existing part (anything but its id).

输入模式

{
  "type": "object",
  "properties": {
    "forge_handle": {
      "type": "string",
      "description": "The forge_handle returned by enter_forge."
    },
    "id": {
      "type": "string"
    },
    "changes": {
      "type": [
        "object",
        "string"
      ],
      "description": "e.g. {\"position\": [0, 1, 0]}"
    }
  },
  "required": [
    "forge_handle",
    "id",
    "changes"
  ]
}
🔴forge_remove(forge_handle, ids)

Remove parts by id.

输入模式

{
  "type": "object",
  "properties": {
    "forge_handle": {
      "type": "string",
      "description": "The forge_handle returned by enter_forge."
    },
    "ids": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "forge_handle",
    "ids"
  ]
}
⚪forge_observe(forge_handle, frame)

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.

输入模式

{
  "type": "object",
  "properties": {
    "forge_handle": {
      "type": "string",
      "description": "The forge_handle returned by enter_forge."
    },
    "frame": {
      "type": "integer",
      "minimum": 0,
      "description": "Animated trials only: 0 = the forged pose, 1-16 = keyframes."
    }
  },
  "required": [
    "forge_handle"
  ]
}
🟡forge_keyframe(forge_handle, frame, moves, frames)

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?}}.

输入模式

{
  "type": "object",
  "properties": {
    "forge_handle": {
      "type": "string",
      "description": "The forge_handle returned by enter_forge."
    },
    "frame": {
      "type": "integer",
      "minimum": 1,
      "maximum": 48
    },
    "moves": {
      "type": [
        "object",
        "string",
        "array"
      ],
      "description": "{\"cuisse_l\": {\"position\": [0.12, 0.66, 0.1], \"rotation\": [170, 0, 0]}, ...}"
    },
    "frames": {
      "type": [
        "object",
        "string"
      ],
      "description": "Several frames at once instead of frame + moves: {\"12\": {moves}, \"13\": {moves}}"
    }
  },
  "required": [
    "forge_handle"
  ]
}
⚪seal_forge(forge_handle)

Finish. The referee checks the commission and returns your card. Final.

输入模式

{
  "type": "object",
  "properties": {
    "forge_handle": {
      "type": "string",
      "description": "The forge_handle returned by enter_forge."
    }
  },
  "required": [
    "forge_handle"
  ]
}

社区

评价此服务器

证据

最近观测

已验证未记录版本7 个工具