okfindex

Search Open Knowledge Format (OKF) bundles, read a bundle card and submit your own with IndexNow.

Should I use this

Quality & Safety

B
Description quality
90%
Schema completeness
59%
Naming quality
89%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'api_index' description lacks action verbin api_index

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,305Tokens (tool definitions)
~1.1 KBTypical response size
Moderate attention impact (1.02% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "okfindex": {
      "url": "https://okfindex.com/mcp"
    }
  }
}

Remote endpoints

https://okfindex.com/mcpstreamable-http

What it can do

Tool inventory

Tools (7)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢api_index

Index of the OKF Index API: routes, quota (none) and how to plug the MCP.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢search_bundles(q, origin, repo, version, language, ...)

Search the index of OKF bundles: free text over name, tagline, description and origin; filter by provenance (github|domain), repository, version, language, license, root type or concept count; search root concept text. Paginate with limit/offset. Only `live` bundles. Free text matches the name, the tagline, the description and the origin identifier (`owner/repo:path` or the bundle URL). No `total` on purpose: `GET /api/okf/stats` has it.

Input Schema

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "Free text over name, tagline, description and origin identifier."
    },
    "origin": {
      "type": "string",
      "description": "Provenance: found by the GitHub sweep, or submitted by a domain.",
      "enum": [
        "github",
        "domain"
      ]
    },
    "repo": {
      "type": "string",
      "description": "Only bundles of one repository, `owner/repo` (case-insensitive)."
    },
    "version": {
      "type": "string",
      "description": "Only bundles declaring one of these `okf_version` values; comma-separated, up to 5."
    },
    "language": {
      "type": "string",
      "description": "Only bundles whose repository language is one of these; comma-separated, up to 5 (GitHub bundles)."
    },
    "concept": {
      "type": "string",
      "description": "Text in the indexed root content, including listed concept names and summaries (first 1000 characters); up to 80 characters."
    },
    "concepts": {
      "type": "string",
      "description": "Number of entries listed by the root. Up to 5 comma-separated bands: 0,1-5,6-20,21-100,101+."
    },
    "type": {
      "type": "string",
      "description": "Type declared by the root, not the types of every concept. Up to 5 comma-separated values, 40 characters each."
    },
    "license": {
      "type": "string",
      "description": "Repository license. Up to 5 comma-separated values, 40 characters each."
    },
    "sort": {
      "type": "string",
      "description": "Result order: arrival, last content change, name or repository stars.",
      "enum": [
        "recent",
        "updated",
        "name",
        "stars"
      ],
      "default": "recent"
    },
    "limit": {
      "type": "integer",
      "description": "Bundles per page, at most 100.",
      "default": 24
    },
    "offset": {
      "type": "integer",
      "description": "How many bundles to skip. Use `next_offset` from the previous response; the list ends at 1000.",
      "default": 0
    }
  }
}
🟢get_bundle(id)

One bundle's card: root index.md URL, version, concept count, provenance and repository signal. `live` and `low` (example or fixture bundles kept out of the search) both answer here.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Bundle id, the `id` of every item in the list."
    }
  },
  "required": [
    "id"
  ]
}
🟢index_stats

Size of the index by provenance and when it last changed.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟡submit_bundles(urlList, host, key, keyLocation)

Queue bundle root URLs served by a host you own. IndexNow rules: the key file at https://<host>/<key>.txt has to match, the answer is 202, and nothing of yours is read before the collector checks that file. No account, no payment: ownership is proved by a key file on the host, exactly as IndexNow does it. Host `https://<host>/<key>.txt` containing the key (or point `keyLocation` at another path on the SAME host), then send the bundle URLs. We answer **202**: the key has not been checked yet. Verification and reading happen on our collector, never at the edge — so nothing is published, and no URL of yours is fetched, before the key matches. Re-sending a URL is how you say the bundle changed; it goes back in line to be re-read. At most 100 URLs per request and 200 per host per UTC day. Bundles in public GitHub repositories need no ping: the sweep finds them.

Input Schema

{
  "type": "object",
  "properties": {
    "urlList": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The bundle roots (`index.md` files): https, on `host`, ending in .md — any path, since the spec fixes none."
    },
    "host": {
      "type": "string",
      "description": "The domain that serves the bundles and the key file."
    },
    "key": {
      "type": "string",
      "description": "The IndexNow key: 8 to 128 characters of [a-zA-Z0-9-]."
    },
    "keyLocation": {
      "type": "string",
      "description": "Alternative location of the key file, on the SAME host. Default: `https://<host>/<key>.txt`."
    }
  },
  "required": [
    "host",
    "key",
    "urlList"
  ]
}
🟢pricing

Current public prices and free allowances; no charge.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢billing

Payment discovery and billing summary; does not create a charge.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded7 tools