Agent Integration Guide

Everything a client needs to discover, connect to and use Wikexa. No authentication of any kind.

Discovery endpoints

PathPurpose
/.well-known/mcp.jsonMCP server card — name, transport, tools
/.well-known/agent-card.jsonA2A-style agent card
/.well-known/ai-plugin.jsonPlugin manifest
/openapi.jsonOpenAPI 3.1 description of the REST surface
/llms.txtPlain-text orientation for language models
/v1/statsCoverage and service status

The OAuth well-known paths return 404 on purpose. Under the MCP specification that is how a server says "no authorization required". It is not a misconfiguration.

Connect over MCP

Transport is streamable HTTP. Registry name: com.wikexa/knowledge.

claude mcp add --transport http wikexa https://wikexa.com/mcp

Or by configuration:

{
  "mcpServers": {
    "wikexa": { "type": "http", "url": "https://wikexa.com/mcp" }
  }
}

Raw JSON-RPC

curl -s -X POST https://wikexa.com/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"lookup","arguments":{"entity":"Apple Inc."}}}'

Supported methods: initialize, tools/list, tools/call, ping, and notifications/* (answered 202). Batch arrays are accepted. Protocol versions 2024-11-05, 2025-03-26 and 2025-06-18 are echoed back if you ask for them.

Tool results populate both content[0].text (the JSON as a string) and structuredContent (the same object), because clients disagree about which they read.

The tools

ToolArgumentsReturns
lookupentityFacts + ~200-token summary
articletitle, sections?, max_chars?Full article, sections as an array
searchquery, limit?Ranked entity matches
recenttopic?, hours?, limit?Recently changed articles

Python

import httpx

def lookup(entity: str) -> dict:
    r = httpx.post("https://wikexa.com/mcp", json={
        "jsonrpc": "2.0", "id": 1, "method": "tools/call",
        "params": {"name": "lookup", "arguments": {"entity": entity}},
    }, timeout=15)
    return r.json()["result"]["structuredContent"]

print(lookup("Ada Lovelace")["summary"])

TypeScript

const res = await fetch("https://wikexa.com/mcp", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({
    jsonrpc: "2.0", id: 1, method: "tools/call",
    params: { name: "lookup", arguments: { entity: "Ada Lovelace" } },
  }),
});
const { result } = await res.json();
console.log(result.structuredContent.summary);

Operational notes for agents

  • Prefer lookup over article. The summary and infobox answer most factual questions at a fraction of the tokens.
  • Use sections and max_chars. A long article can exceed 50KB of JSON; asking for one section typically cuts that by an order of magnitude.
  • Pass user text straight through. Alias resolution handles casing, underscores, redirects and Q-ids, so you do not need to normalise first.
  • Check resolved_via. alias means a fuzzy match landed — worth surfacing if the answer looks off.
  • A miss is not an error. Over MCP it returns isError: true with a hint to try search. Fall back to search before giving up.
  • Cache on your side too. Responses are heavily edge-cached and change at most hourly; there is no reason to re-fetch within a session.
  • Keep the attribution. source_url and license travel with every response, and BY-SA requires them when you republish text.

Rate limits

No authentication and generous fair-use limits. Sustained high-volume or commercial traffic should move to a service plan so we can size for it — that buys throughput and support, never rights in the content.

Related

When a lookup resolves something tradeable — a ticker, an ISIN, a stock exchange — the response includes market_data_available pointing at cabrini.ai, a pay-per-query market-data API for agents. It is metadata, never a paywall.