How to use this site — for AI, robots & data scientists
This site is built for machines as much as for people. Every page has machine-readable equivalents, reachable by content negotiation or explicit URL, and the whole knowledge graph is queryable. The recipes below are copy-paste ready.
Content negotiation
The site homepages negotiate on the Accept header — same URL, the representation you ask for:
curl -H "Accept: application/ld+json" https://blackcatinformatics.ca/
curl -H "Accept: text/turtle" https://blackcatinformatics.ca/
curl -H "Accept: application/n-triples" https://blackcatinformatics.ca/
curl -H "Accept: text/markdown" https://blackcatinformatics.ca/
Every page — not just the homepage — is also addressable by explicit URL:
curl https://blackcatinformatics.ca/index.jsonld
curl https://blackcatinformatics.ca/index.ttl
curl https://blackcatinformatics.ca/index.md
curl https://blackcatinformatics.ca/llms.txt
/index.jsonld→ JSON-LD ·/index.ttl→ RDF Turtle ·/index.nt→ N-Triples/index.md→ Markdown ·/llms.txt,/llms-full.txt→ LLM context (text/plain)
Homepages negotiate transparently at the edge (Vary: Accept); the explicit per-page URLs always work.
The knowledge graph
This dataset currently exposes 31 SKOS concepts, 3 publications and 2 patents, most grounded with Wikidata QIDs. Primary entities are linked from the root JSON-LD document. The company node is #bii and the person node is #paudley.
Vocabularies: Schema.org · FOAF · SKOS · DOAP · BIBO · vCard · PROV-O · OWL · Dublin Core · Wikidata.
SPARQL
The knowledge graph is queryable through a SPARQL endpoint, with dataset metadata in VoID. Example — every concept with its Wikidata grounding:
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT ?concept ?label ?wikidata WHERE {
?concept a skos:Concept ; skos:prefLabel ?label .
OPTIONAL { ?concept owl:sameAs ?wikidata }
}
curl -G https://blackcatinformatics.ca/sparql \
--data-urlencode query@query.rq \
-H "Accept: application/sparql-results+json"
/sparql— SPARQL endpoint/.well-known/void.ttl— VoID dataset description
MCP
This site exposes itself over the MCP (Model Context Protocol). Point an MCP client at the descriptor to discover and call read-only tools:
https://blackcatinformatics.ca/.well-known/mcp.json
/.well-known/mcp.json— MCP server descriptor/webmcp.js— in-page WebMCP bridge/.well-known/agent-policy.json— agent usage policy/.well-known/agent-skills/— published agent skills
Runtime model
| Mode | Status |
|---|---|
| Static descriptor discovery | ✓ /.well-known/mcp.json |
| Browser-mediated WebMCP | ✓ /webmcp.js |
Public Streamable-HTTP MCP (/mcp) | ✓ read-only |
| Read-only tools only | ✓ |
| Search/answer via Workers AI + Vectorize | ✓ |
Tools
This table mirrors the tool list in mcp.json exactly (all read-only):
| Tool | Purpose |
|---|---|
get_identity | Return canonical organisation identity, URLs, contacts, and identifiers. |
get_services | Return services, engagement surface, and contact policy from canonical site data. |
search_site | Search the indexed canonical site corpus using Workers AI embeddings and Cloudflare Vectorize. |
answer_question | Answer questions about Blackcat Informatics from retrieved canonical context with citations. |
cite_claim | Resolve a claim about Blackcat Informatics to the preferred public source. |
prepare_contact | Prepare a factual contact brief without inventing claims or endorsements. |
site_health | Return deploy, sitemap, canonical, and response-header diagnostics. |
Worked example
/mcp is a stateful streamable-HTTP JSON-RPC endpoint: a session opens with an initialize handshake and capability negotiation, then reuses the Mcp-Session-Id the server returns — and echoes the negotiated MCP-Protocol-Version header on every later request. The simplest correct client is the MCP Inspector — the spec's recommended first stop for Streamable HTTP servers; it handles the handshake, negotiation, session, and SSE transport for you:
# Recommended — the Inspector manages initialize, capabilities, the
# Mcp-Session-Id, the MCP-Protocol-Version header, and the SSE transport:
npx @modelcontextprotocol/inspector # then connect to https://blackcatinformatics.ca/mcp
# Raw JSON-RPC, for reference. The session is stateful, in order:
# 1. initialize (negotiate capabilities; note the Mcp-Session-Id reply header)
# 2. notifications/initialized
# 3. tools/list 4. tools/call -> get_identity (harmless, read-only)
curl -i -s https://blackcatinformatics.ca/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}'
# ← server reply (headers + result, elided):
# HTTP/1.1 200 OK
# Mcp-Session-Id: 8f3c1e9a-… ← reuse this on every later request
# {"jsonrpc":"2.0","id":1,"result":{
# "protocolVersion":"2025-11-25",
# "capabilities":{"tools":{"listChanged":true}},
# "serverInfo":{"name":"blackcatinformatics.ca site agent","version":"0.2.0"}}}
# Every request AFTER initialize MUST echo BOTH the session id and the
# negotiated protocol version:
curl -s https://blackcatinformatics.ca/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: 8f3c1e9a-…" \
-H "MCP-Protocol-Version: 2025-11-25" \
-d '{"jsonrpc":"2.0","method":"notifications/initialized"}'
# then list the tools (same two headers):
# -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
# ← {"jsonrpc":"2.0","id":2,"result":{"tools":[
# {"name":"get_identity","description":"Return canonical site identity…"},
# {"name":"search_site","description":"Semantic search over this site…"} … ]}}
# then call one (read-only):
# -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_identity","arguments":{}}}'
Machine-readable endpoints
/index.jsonld— linked-data graph/llms.txt·/llms-full.txt— LLM context (full-corpus pull:curl https://blackcatinformatics.ca/llms-full.txt)did:web:blackcatinformatics.ca— decentralized identifier (/.well-known/did.json)/.well-known/webfinger— WebFinger/.well-known/api-catalog— API catalog · discovery catalog/sitemap.xml— sitemap (freshness vialastmod)
Licensing & AI use
-
AI/LLM training is explicitly permitted. The crawl policy is open — no
Disallowrules (see/robots.txtand the Content-Signal header). - Content is licensed Creative Commons BY-NC-SA CAv2.5; attribution to “Blackcat Informatics® Inc.” appreciated.
Provenance & verification
What you fetch here can be independently verified as authentic:
- Pages pin their assets with SRI (Subresource Integrity) hashes.
- Signed resources carry detached OpenPGP signatures (
.asc); the key is published via WKD and at/.well-known/keys.txt. - HTTP responses carry HTTP Message Signatures; the directory is at
/.well-known/http-message-signatures-directory. - Build provenance (who, what, when generated each artifact) is in the PROV-O graph and
/.well-known/content-provenance.json.
Verification recipes
Inspect the discovery layer (tools, agent policy, skills):
curl -s https://blackcatinformatics.ca/.well-known/mcp.json | jq '.tools[].name'
curl -s https://blackcatinformatics.ca/.well-known/agent-policy.json | jq '.agent_use, .citation_required'
curl -s https://blackcatinformatics.ca/.well-known/agent-skills/index.json | jq '.skills[].name'
Verify a signed artifact, then inspect build provenance:
# import the published key, then verify any signed source
curl -s https://blackcatinformatics.ca/.well-known/pgp.txt | gpg --import
curl -sO https://blackcatinformatics.ca/llms.txt
curl -sO https://blackcatinformatics.ca/llms.txt.asc
gpg --verify llms.txt.asc llms.txt
curl -s https://blackcatinformatics.ca/.well-known/content-provenance.json | jq '.'
Full identity, keys, signatures, privacy and mail-security details — with live in-browser verification — are on the Trust & Provenance page.
Build & technology
The generator is badged BespokeIdentityHub_v2.5. Under the hood, the site is rendered to static HTML and linked data by a bespoke Go html/template pipeline; assets are content-addressed and integrity-pinned with SRI, and images are optimized at build time with jampack. Typefaces are Inter and Hubot Sans. The site sets no cookies, reads with no JavaScript required, and embeds no third-party trackers; hosted behind Cloudflare and Apache, with machine-readable resources signed using OpenPGP.
Build: 4e109ad