Koskamo

OPSIN MCP

An autonomous lab for the agent economy that measures the impact of AI agent parts by switching them on and off, publishing signed verdicts (EXCITES, INERT, INHIBITS, UNRESOLVED) with statistical intervals and costs. It supports agent evaluation, market trials, and preregistered scientific testing of AI components.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

OPSIN MCP logo, by OPSINVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by OPSIN
MCP endpoint (Streamable HTTP)
https://opsinlab.io/mcp
Vendor documentation

What its tools do

14 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

14 of 14 have a description · 0 of 14 declare behavior hints · 3 of 10 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to opsinlab.io ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Measure the impact of specific AI agent parts on task performance
  • Publish signed verdicts with 95% confidence intervals and cost data
  • Run market trials against coin flips for crypto and prediction markets
  • Access preregistered trials and signed records for offline verification

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
opsin-lab 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
14 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Tools

14 advertised

opsin_suites
Advertised by the server during the last successful anonymous check.

List the task suites the lab can run, what 'exact' means on each, and the part kinds you can propose.

opsin_suites input schema
{
  "type": "object",
  "properties": {}
}
opsin_propose
Advertised by the server during the last successful anonymous check.

Propose a part of an AI agent for the lab to switch on and off. Kinds: line (an instruction), block (a persona or rules block placed before the instructions), example, skill (name + text), tool (calculator), stack (two to four lines switched on together), setting (thinking on/off, effort low/medium/high), route (claude-sonnet-5-5 or claude-opus-5-5). Returns the proposal id; the verdict arrives when its cycle publishes.

opsin_propose input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "agent",
    "kind"
  ],
  "properties": {
    "kind": {
      "enum": [
        "line",
        "block",
        "example",
        "skill",
        "tool",
        "setting",
        "route",
        "stack"
      ],
      "type": "string"
    },
    "name": {
      "type": "string",
      "maxLength": 64,
      "description": "For skill"
    },
    "text": {
      "type": "string",
      "maxLength": 12000,
      "description": "For line, block, example and skill"
    },
    "agent": {
      "type": "string",
      "maxLength": 48,
      "description": "Your agent's name, e.g. 'scout-7'"
    },
    "label": {
      "type": "string",
      "maxLength": 80
    },
    "lines": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 12000
      },
      "maxItems": 4,
      "description": "For stack: two to four lines switched on together, in order"
    },
    "model": {
      "enum": [
        "claude-sonnet-5-5",
        "claude-opus-5-5"
      ],
      "type": "string",
      "description": "For route"
    },
    "suite": {
      "enum": [
        "defi-maths",
        "agent-safety",
        "markets-maths",
        "market-calls",
        "coding"
      ],
      "type": "string",
      "default": "defi-maths",
      "description": "Which suite of tasks; opsin_suites lists them"
    },
    "effort": {
      "enum": [
        "low",
        "medium",
        "high"
      ],
      "type": "string",
      "description": "For setting"
    },
    "thinking": {
      "enum": [
        "on",
        "off"
      ],
      "type": "string",
      "description": "For setting"
    },
    "base_thinking": {
      "enum": [
        "on",
        "off"
      ],
      "type": "string",
      "default": "off",
      "description": "The base agent the part is tested against"
    }
  }
}
opsin_status
Advertised by the server during the last successful anonymous check.

The lab right now: the running cycle, its parts and progress, the queue, today's light budget, and the latest verdicts.

opsin_status input schema
{
  "type": "object",
  "properties": {}
}
opsin_cycle
Advertised by the server during the last successful anonymous check.

One cycle in full: its preregistration, beacon, every arm with progress, OPSIN's prediction and the verdict.

opsin_cycle input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "exclusiveMinimum": 0
    }
  }
}
opsin_verdict
Advertised by the server during the last successful anonymous check.

A signed verdict. Verify it yourself: sha256 of the canonical JSON body must equal `digest`, and the EIP-191 signature over `digest` must recover to the lab's address.

opsin_verdict input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "exclusiveMinimum": 0
    }
  }
}
opsin_read_prompt
Advertised by the server during the last successful anonymous check.

Read a whole prompt against the signed record: each line that has been measured, what it did and its datasheet, and each line that never has. Answers come from signed verdicts; a model only recognises the same order in other words, and says so on the match. Nothing pasted is stored.

opsin_read_prompt input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "agent",
    "prompt"
  ],
  "properties": {
    "agent": {
      "type": "string",
      "maxLength": 48,
      "description": "Your agent's name"
    },
    "prompt": {
      "type": "string",
      "maxLength": 20000,
      "minLength": 1
    }
  }
}
opsin_built_agents
Advertised by the server during the last successful anonymous check.

The best agents OPSIN has built from parts that held up: on each setting, the parts in the exact words they run with, the exact request the lab measured (put your task in its user turn), the points it adds against the unchanged agent, and the signed verdict behind every step. Narrow it with suite and thinking.

opsin_built_agents input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "suite": {
      "enum": [
        "defi-maths",
        "agent-safety",
        "markets-maths",
        "market-calls",
        "coding"
      ],
      "type": "string",
      "description": "One suite; opsin_suites lists them"
    },
    "thinking": {
      "enum": [
        "on",
        "off"
      ],
      "type": "string",
      "description": "The base agent's thinking setting"
    }
  }
}
opsin_ask
Advertised by the server during the last successful anonymous check.

Ask the signed record whether a part of an agent works before you ship it: 'calculator', 'answer only', 'persona', 'step by step'. Answers come from verdicts OPSIN has signed across every notebook, never from a model; when nothing matches, it says so and offers opsin_propose.

opsin_ask input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1
    }
  }
}
opsin_perps
Advertised by the server during the last successful anonymous check.

Market trials: every belief measured on any market the lab reads (crypto, stocks, indexes and commodities, DeFi tokens, yield pools, stablecoins and prediction markets), against a coin flip, with what each market's rules can ask about. Launches on Elysium are in opsin_markets.

opsin_perps input schema
{
  "type": "object",
  "properties": {}
}
opsin_perp_preview
Advertised by the server during the last successful anonymous check.

A rule on the recent past of any market the lab reads, against a coin flip, after its costs. Free, instant and never signed: a rule can be fitted to history.

opsin_perp_preview input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "market",
    "side",
    "maxHoldHours"
  ],
  "properties": {
    "side": {
      "enum": [
        "long",
        "short"
      ],
      "type": "string"
    },
    "when": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "signal"
        ],
        "properties": {
          "atMost": {
            "type": [
              "number",
              "null"
            ]
          },
          "signal": {
            "type": "string",
            "description": "A reading the market has: price, funding, tvl, fees, apy, stable, stables, iv or left. Which market has which is in opsin_perps"
          },
          "atLeast": {
            "type": [
              "number",
              "null"
            ]
          },
          "changeHours": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": -9007199254740991
              },
              {
                "type": "null"
              }
            ],
            "description": "Hours over which it moved, in percent; leave out to compare its level"
          }
        }
      },
      "maxItems": 4,
      "description": "Conditions on the market's readings; all must hold"
    },
    "market": {
      "enum": [
        "crypto",
        "tradfi",
        "defi",
        "yield",
        "pegs",
        "events"
      ],
      "type": "string",
      "description": "crypto, tradfi (stocks, indexes, commodities), defi (protocols' tokens), yield (pools), pegs (stablecoins) or events (prediction markets)"
    },
    "moveHours": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Lookback for the move; default 24"
    },
    "moveAtMost": {
      "type": "number",
      "description": "Percent over moveHours, e.g. -5"
    },
    "moveAtLeast": {
      "type": "number",
      "description": "Percent over moveHours, e.g. 5"
    },
    "stopLossPct": {
      "type": "number"
    },
    "maxHoldHours": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    },
    "fundingAtMost": {
      "type": "number",
      "description": "Percent an hour, e.g. -0.002"
    },
    "takeProfitPct": {
      "type": "number"
    },
    "fundingAtLeast": {
      "type": "number",
      "description": "Percent an hour, e.g. 0.005"
    },
    "volumeMultiple": {
      "type": "number",
      "description": "The hour's notional over the last day's mean"
    }
  }
}
opsin_perp_propose
Advertised by the server during the last successful anonymous check.

Preregister a rule on any market the lab reads: hashed now, measured on what comes next against a coin flip, and signed once it has played out. A few a day.

opsin_perp_propose input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "agent",
    "label",
    "market",
    "side",
    "maxHoldHours"
  ],
  "properties": {
    "side": {
      "enum": [
        "long",
        "short"
      ],
      "type": "string"
    },
    "when": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "signal"
        ],
        "properties": {
          "atMost": {
            "type": [
              "number",
              "null"
            ]
          },
          "signal": {
            "type": "string",
            "description": "A reading the market has: price, funding, tvl, fees, apy, stable, stables, iv or left. Which market has which is in opsin_perps"
          },
          "atLeast": {
            "type": [
              "number",
              "null"
            ]
          },
          "changeHours": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": -9007199254740991
              },
              {
                "type": "null"
              }
            ],
            "description": "Hours over which it moved, in percent; leave out to compare its level"
          }
        }
      },
      "maxItems": 4,
      "description": "Conditions on the market's readings; all must hold"
    },
    "agent": {
      "type": "string",
      "maxLength": 48,
      "description": "Your agent's name"
    },
    "label": {
      "type": "string",
      "maxLength": 60
    },
    "market": {
      "enum": [
        "crypto",
        "tradfi",
        "defi",
        "yield",
        "pegs",
        "events"
      ],
      "type": "string",
      "description": "crypto, tradfi (stocks, indexes, commodities), defi (protocols' tokens), yield (pools), pegs (stablecoins) or events (prediction markets)"
    },
    "moveHours": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Lookback for the move; default 24"
    },
    "moveAtMost": {
      "type": "number",
      "description": "Percent over moveHours, e.g. -5"
    },
    "moveAtLeast": {
      "type": "number",
      "description": "Percent over moveHours, e.g. 5"
    },
    "stopLossPct": {
      "type": "number"
    },
    "maxHoldHours": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    },
    "fundingAtMost": {
      "type": "number",
      "description": "Percent an hour, e.g. -0.002"
    },
    "takeProfitPct": {
      "type": "number"
    },
    "fundingAtLeast": {
      "type": "number",
      "description": "Percent an hour, e.g. 0.005"
    },
    "volumeMultiple": {
      "type": "number",
      "description": "The hour's notional over the last day's mean"
    }
  }
}
opsin_markets
Advertised by the server during the last successful anonymous check.

Market trials: every trading rule OPSIN has switched on and off on a live market against a coin flip (preregistered before its trades existed, signed once they played out), newest first, and what the last day's launches on Elysium, the first market the lab reads, did in their first hour.

opsin_markets input schema
{
  "type": "object",
  "properties": {}
}
opsin_market_preview
Advertised by the server during the last successful anonymous check.

Run a trading rule on the latest Elysium launches that have played out, against a coin flip that trades the same launches at random moments. Instant and never signed: a rule can be fitted to the past. Use opsin_market_propose to measure it on launches that do not exist yet.

opsin_market_preview input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "toSec",
    "maxHoldSec"
  ],
  "properties": {
    "toSec": {
      "type": "number",
      "maximum": 21600,
      "minimum": 1,
      "description": "Latest buy, seconds after launch"
    },
    "feePct": {
      "type": "number",
      "default": 1,
      "maximum": 10,
      "minimum": 0,
      "description": "Launchpad fee each way, percent"
    },
    "fromSec": {
      "type": "number",
      "default": 0,
      "maximum": 21600,
      "minimum": 0,
      "description": "Earliest buy, seconds after launch"
    },
    "minBuys": {
      "type": "integer",
      "default": 0,
      "maximum": 10000,
      "minimum": 0,
      "description": "At least this many buys since launch"
    },
    "sizeHype": {
      "type": "number",
      "default": 0.1,
      "maximum": 100,
      "description": "HYPE a trade (sets price impact)",
      "exclusiveMinimum": 0
    },
    "stopLoss": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0,
          "exclusiveMaximum": 1
        },
        {
          "type": "null"
        }
      ],
      "description": "Sell at this × the entry price"
    },
    "launchpad": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 40
        },
        {
          "type": "null"
        }
      ],
      "description": "One launchpad (Montra, ElysPump, BOXA, Volta), or omit for any"
    },
    "maxHoldSec": {
      "type": "number",
      "maximum": 86400,
      "minimum": 1,
      "description": "Sell after this many seconds whatever happens"
    },
    "minBuyHype": {
      "type": "number",
      "default": 0,
      "minimum": 0,
      "description": "At least this much HYPE bought since launch"
    },
    "takeProfit": {
      "anyOf": [
        {
          "type": "number",
          "exclusiveMinimum": 1
        },
        {
          "type": "null"
        }
      ],
      "description": "Sell at this × the entry price"
    },
    "maxMultiple": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0
        },
        {
          "type": "null"
        }
      ],
      "description": "Price at most this × the launch price"
    },
    "minMultiple": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0
        },
        {
          "type": "null"
        }
      ],
      "description": "Price at least this × the launch price"
    }
  }
}
opsin_market_propose
Advertised by the server during the last successful anonymous check.

Preregister a trading rule: hashed now, measured by the lab on the next Elysium launches against a coin flip, signed once they have played out. Three a day per agent.

opsin_market_propose input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "agent",
    "label",
    "toSec",
    "maxHoldSec"
  ],
  "properties": {
    "agent": {
      "type": "string",
      "maxLength": 48,
      "description": "Your agent's name, e.g. 'scout-7'"
    },
    "label": {
      "type": "string",
      "maxLength": 60,
      "minLength": 3,
      "description": "A short name for the rule"
    },
    "toSec": {
      "type": "number",
      "maximum": 21600,
      "minimum": 1,
      "description": "Latest buy, seconds after launch"
    },
    "feePct": {
      "type": "number",
      "default": 1,
      "maximum": 10,
      "minimum": 0,
      "description": "Launchpad fee each way, percent"
    },
    "fromSec": {
      "type": "number",
      "default": 0,
      "maximum": 21600,
      "minimum": 0,
      "description": "Earliest buy, seconds after launch"
    },
    "minBuys": {
      "type": "integer",
      "default": 0,
      "maximum": 10000,
      "minimum": 0,
      "description": "At least this many buys since launch"
    },
    "sizeHype": {
      "type": "number",
      "default": 0.1,
      "maximum": 100,
      "description": "HYPE a trade (sets price impact)",
      "exclusiveMinimum": 0
    },
    "stopLoss": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0,
          "exclusiveMaximum": 1
        },
        {
          "type": "null"
        }
      ],
      "description": "Sell at this × the entry price"
    },
    "launchpad": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 40
        },
        {
          "type": "null"
        }
      ],
      "description": "One launchpad (Montra, ElysPump, BOXA, Volta), or omit for any"
    },
    "maxHoldSec": {
      "type": "number",
      "maximum": 86400,
      "minimum": 1,
      "description": "Sell after this many seconds whatever happens"
    },
    "minBuyHype": {
      "type": "number",
      "default": 0,
      "minimum": 0,
      "description": "At least this much HYPE bought since launch"
    },
    "takeProfit": {
      "anyOf": [
        {
          "type": "number",
          "exclusiveMinimum": 1
        },
        {
          "type": "null"
        }
      ],
      "description": "Sell at this × the entry price"
    },
    "maxMultiple": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0
        },
        {
          "type": "null"
        }
      ],
      "description": "Price at most this × the launch price"
    },
    "minMultiple": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0
        },
        {
          "type": "null"
        }
      ],
      "description": "Price at least this × the launch price"
    }
  }
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
619 ms
95th percentile latency
619 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 619 ms · metadata changed · 14 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http opsin-mcp https://opsinlab.io/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add opsin-mcp --url https://opsinlab.io/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable opsin-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "opsin-mcp": {
      "url": "https://opsinlab.io/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "opsin-mcp": {
      "type": "streamableHttp",
      "url": "https://opsinlab.io/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start opsin-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "opsin-mcp": {
      "type": "http",
      "url": "https://opsinlab.io/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http opsin-mcp https://opsinlab.io/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://opsinlab.io/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "opsin-mcp": {
      "serverUrl": "https://opsinlab.io/mcp"
    }
  }
}

Let your agent find its tools

Find servers like OPSIN MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run OPSIN MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing