MCP server: One MCP server.

Foobar

@dagMCP server · Native

For testing and debugging

v1.0.0
Freeno charge per call

One address for any MCP client, signed in with your Odel account.

What it does

3 read3 other

Grouped by tool name.

What it costs

Free

Odel charges nothing per call.

Tools

6 · grouped by tool name

Read · 3Look things up

whoamiReturn the Odel caller contextNo parameters

Parameters

Takes no parameters.

Input schema as JSON
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {}
}
computeRun a binary arithmetic operation3 parameters

Parameters

  • anumberrequired

    First operand

  • bnumberrequired

    Second operand

  • opstringrequired

    Operation

    One of add, subtract, multiply, divide

Input schema as JSON
{
  "type": "object",
  "properties": {
    "a": {
      "type": "number",
      "description": "First operand"
    },
    "b": {
      "type": "number",
      "description": "Second operand"
    },
    "op": {
      "type": "string",
      "enum": [
        "add",
        "subtract",
        "multiply",
        "divide"
      ],
      "description": "Operation"
    }
  },
  "required": [
    "a",
    "b",
    "op"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
check_configValidate the injected config/secrets and report (masked) statusNo parameters

Parameters

Takes no parameters.

Input schema as JSON
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {}
}

Other · 3Neither hinted nor named

echoEcho a message back1 parameter

Parameters

  • messagestringrequired

Returns

  • messagestringrequired
  • lengthnumberrequired
Input schema as JSON
{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "message"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
boomThrow a ModuleError of the requested kind (for testing client error handling)1 parameter

Parameters

  • kindstringrequired

    Error kind

    One of api, rate_limit, timeout, not_found, internal

Input schema as JSON
{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "api",
        "rate_limit",
        "timeout",
        "not_found",
        "internal"
      ],
      "description": "Error kind"
    }
  },
  "required": [
    "kind"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
slow_echoEcho a message after a delay (0–5000 ms) — useful for testing client timeouts/loading states2 parameters

Parameters

  • messagestringrequired
  • delayMsintegerrequired

    Delay before responding, in milliseconds

Input schema as JSON
{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "minLength": 1
    },
    "delayMs": {
      "type": "integer",
      "minimum": 0,
      "maximum": 5000,
      "description": "Delay before responding, in milliseconds"
    }
  },
  "required": [
    "message",
    "delayMs"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
README2 min read

FooBar — Odel reference / test module

FooBar is a deliberately feature-complete Odel module, built on @odel/module-sdk. It's not useful work — it's a stable target for testing: a reference for module authors, a server for client/inspector developers to point at, and a fixture for verifying the SDK + the Odel context/secrets envelope end-to-end. As the SDK gains features, FooBar gains tools to exercise them. Tools Tool Input Demonstrates echo { message } the simplest tool + input validation + an output schema whoami – reading the Odel identity context (getModuleContext) compute { a, b, op } typed numeric input, enum, SuccessResponseSchema, error branch (divide-by-zero) check_config – per-user secrets via parseConfig(configSchema, extra); throws MISSING_SECRET/INVALID_SECRET; returns only masked status boom { kind } throwing every category of ModuleError for client error-handling tests slow_echo { message, delayMs } bounded delay for testing client timeouts/loading states Config

Declared via an exported Zod configSchema:

FOOBAR_API_KEY (required) — any non-empty string; FooBar checks presence only, never the value.
FOOBAR_WEBHOOK_URL (optional) — must be a valid URL if provided.

FooBar advertises this over MCP as a resource at odel://config (shape { secrets: [{ name, description, required }] }), which the inspector's Vars tab reads to prefill. Develop

pnpm install pnpm dev # wrangler dev (default :8787) pnpm test # node-env MCP transport tests pnpm typecheck pnpm build # tsc → dist/index.js (the artifact the Odel platform deploys)

Call it the way Odel's mcp-proxy does — a bare tools/call carrying the context/secrets envelope:

curl -s localhost:8787
-H 'content-type: application/json' -H 'accept: application/json, text/event-stream'
-d '{ "jsonrpc":"2.0","id":1,"method":"tools/call", "params":{ "name":"check_config","arguments":{}, "_meta":{ "app.odel/context":{"userId":"u_1","displayName":"Ada"}, "app.odel/secrets":{"FOOBAR_API_KEY":"demo-key"} } } }'

Drop the _meta to see the anonymous-context fallback (whoami) and the MISSING_SECRET error (check_config). Deploy

FooBar deploys through the Odel dev-portal like any module: connect this repo, pick a branch, deploy. The portal runs pnpm install && pnpm build (producing dist/index.js), bundles it, and uploads it to the module dispatch namespace. License

MIT