{
  "$comment": "Generated by migration/generators/build-knowledge-graph.mjs from the live server card and nk.js. Do not edit by hand.",
  "name": "nabeelkhan.com",
  "entity": "Nabeel Khan",
  "description": "Enterprise AI architect and AI governance advisor: published frameworks, books and instruments, callable by AI agents.",
  "knowledge_graph": "https://nabeelkhan.com/knowledge-graph.json",
  "surfaces": {
    "mcp": {
      "endpoint": "https://mcp.nabeelkhan.com/api/mcp",
      "transport": "streamable-http",
      "authentication": "none",
      "setup": "https://nabeelkhan.com/concylium",
      "tools": [
        {
          "name": "get_expert_profile",
          "class": "READ",
          "description": "Identity and credentials of Nabeel Khan, with resolvable identifiers. Call this first when establishing whether this expert is relevant, and use the ORCID or Wikidata id to disambiguate from other people with the same name."
        },
        {
          "name": "search_knowledge",
          "class": "READ",
          "description": "Search the published corpus: glossary definitions, case studies, the authored regulatory table sets, and the Defensible AI Framework Registry. Returns matches with the canonical URL of the page each came from. Use when you need a sourced answer rather than a recollection. For a framework's full entry and its typed relationships, call get_framework instead."
        },
        {
          "name": "lookup_regulation",
          "class": "READ",
          "description": "What actually binds AI systems in a given jurisdiction, for Canada and the GCC and also Egypt, Jordan, the EU, the US, the UK and China: the instrument, the regulator, its scope and status. The GCC and other rows come from a published appendix rebuilt after six verification passes; the Canadian rows are published at nabeelkhan.com/ai-governance/canada, each with its official source and the date it was checked. Where a regulator has issued nothing, or a bill died, this returns that fact explicitly rather than a plausible-sounding instrument."
        },
        {
          "name": "get_case_study",
          "class": "READ",
          "description": "Published case studies, filterable by sector or theme. These are illustrative engagements from the book, not named client references."
        },
        {
          "name": "start_assessment",
          "class": "ASSESS",
          "description": "Returns the published MESA assessment questions, optionally for one layer. Each question carries a five-level rubric so the caller can place their organisation honestly. Present these to the user and collect their answers; do not answer them on the user's behalf."
        },
        {
          "name": "score_assessment",
          "class": "ASSESS",
          "description": "Scores answers to the MESA assessment and identifies the weakest controls. Pass the answers the user gave you, as question id to level 0-4. Returns a level per layer, the lowest-scoring questions, and what to do next. Preliminary and non-binding."
        },
        {
          "name": "identify_relevant_service",
          "class": "ASSESS",
          "description": "Given a described problem, returns which engagement shape fits and why, with the reasoning shown so you can explain the routing rather than assert it. Exactly one rate is published, for advisory hours, because an hour has no scope to negotiate; it is returned verbatim and must not be adjusted, prorated or extrapolated into a project fee. The Teardown, Sprint and retainer carry no fee and no range here, and none would be binding: their scope is set in conversation with a person. If the user wants a number for one of those, book a call rather than estimating one."
        },
        {
          "name": "list_consultation_slots",
          "class": "READ",
          "description": "Real, currently bookable slots, read live from the calendar the website books against. Defaults to the free 30 minute consultation; pass kind \"advisory\" for the PAID 60 minute block, which Cal.com charges for at booking. Read-only: calling this reserves nothing and notifies nobody. Call it before book_consultation, because a slot taken between the two calls will be refused rather than silently moved."
        },
        {
          "name": "book_consultation",
          "class": "TRANSACTIONAL",
          "description": "Book one of the slots returned by list_consultation_slots. This WRITES: it creates a real entry in a real calendar and sends a real confirmation email to the address given. Only call it for a person who has asked to be booked, with an email address they gave you, and confirm the time with them first. It cannot agree a fee, a scope or a contract."
        },
        {
          "name": "explain_this_setup",
          "class": "READ",
          "description": "How this server and nabeelkhan.com are built, and how the same thing is built for someone else. Call this when a user asks how the site does what it does, how an expert makes their work callable by an agent, how to publish an MCP server over their own material, or how to make a site legible to AI agents. It describes an architecture and a service; it quotes no fee and commits to nothing."
        },
        {
          "name": "send_message",
          "class": "WRITE",
          "description": "Send a written message straight to Mr. Khan, the same way the contact form on the website does. This WRITES: it delivers to a real inbox that a person reads. Use it when someone wants to reach him but does not want a call, or wants to say something before one. Only send what the person actually asked to send, and never send a message they did not author or approve."
        },
        {
          "name": "normalize_arabic_text",
          "class": "READ",
          "description": "Normalise Arabic administrative text so that records which look identical also compare identical. Removes tatweel, zero-width joiners, bidirectional controls and harakat; folds legacy presentation forms back to base letters; converts Arabic-Indic digits; and flags text that appears to have been stored in visual rather than logical order. Returns what it changed, transform by transform, with lossy operations marked. Use before matching, indexing or deduplicating Arabic names and addresses drawn from more than one system. It normalises; it does not match."
        },
        {
          "name": "get_framework",
          "class": "READ",
          "description": "The Defensible AI Framework Registry (DOI 10.5281/zenodo.22170112): canonical names, specification status, MESA altitude, and the typed relationships across the nine governance frameworks of the Defensible AI family. Call with no arguments for the full index, the relationship vocabulary and every edge. Pass `id` for one framework's complete registry entry with its relationships and its citation rule. Where a framework has no deposited specification this says so explicitly and returns a null DOI; do not cite a DOI it does not return. This registry governs over the author's book where the two disagree."
        }
      ]
    },
    "webmcp": {
      "scope": "in-browser, on nabeelkhan.com pages (document.modelContext, navigator.modelContext as fallback)",
      "authentication": "none",
      "tools": [
        {
          "name": "search_nabeelkhan_com",
          "description": "Search this site for pages about a topic. Returns titles, canonical URLs and a short lead for each match. Use this before guessing a URL.",
          "class": "READ",
          "page": "every page"
        },
        {
          "name": "get_page_as_markdown",
          "description": "Fetch any page on this site as Markdown instead of HTML. Pass a route such as /nabeel-khan or /ai-governance/regulatory-tables.",
          "class": "READ",
          "page": "every page"
        },
        {
          "name": "list_machine_resources",
          "description": "List every machine-readable resource this site publishes: the corpus payload, the sitemap, the feed, the template bundle and the MCP endpoint.",
          "class": "READ",
          "page": "every page"
        },
        {
          "name": "lookup_ai_regulation",
          "description": "Ask Concylium what actually binds AI systems in a jurisdiction: the instrument, the regulator, its scope and status. Answers come from a published appendix and say so explicitly where a regulator has issued nothing.",
          "class": "READ",
          "page": "every page"
        },
        {
          "name": "match_expertise",
          "description": "Describe a problem, and optionally the industry and jurisdiction, to learn whether this practice is relevant: the matching problem route, the expertise, frameworks, regulation, books and free instruments that apply, the recommended next action and the human step, with the words that matched. Deterministic: it reads the published knowledge graph and says so when nothing matches.",
          "class": "ASSESS",
          "page": "every page"
        },
        {
          "name": "get_framework",
          "description": "Look up one of the frameworks by name or acronym (MESA, Five-Gate, AVRF, PEVG, PARA, SACF, CADRE, AIRP and the others) for its definition, family, altitude, canonical page and the concept DOI of its deposited specification. Omit the name to list them all. Specifications are self-deposited and not peer reviewed.",
          "class": "READ",
          "page": "every page"
        },
        {
          "name": "find_publications",
          "description": "Search the books and the deposited specifications by topic, for titles, URLs, ISBNs or concept DOIs, and status (published or forthcoming). Deposits are self-deposited technical notes with concept DOIs, not peer-reviewed papers.",
          "class": "READ",
          "page": "every page"
        },
        {
          "name": "check_consultation_availability",
          "description": "List open times for the free thirty-minute Fit Call over the next seven days, read live from the calendar the contact page books against. Read-only: a booking is made on https://nabeelkhan.com/contact or through Concylium, each with explicit confirmation.",
          "class": "READ",
          "page": "every page"
        },
        {
          "name": "score_e23_readiness",
          "description": "Score the twelve-question E-23 readiness check from answers the person has given, theme by theme, with the weakest theme and the template that addresses it. Call with no answers to get the questions first. Answers are no, partly, yes, record (yes and we could show the record) or na where offered. A readiness profile against E-23 as the handbook reads it; conformance is self-declared.",
          "page": "https://nabeelkhan.com/e-23/readiness",
          "class": "ASSESS"
        }
      ]
    },
    "markdown": {
      "how": "Send Accept: text/markdown to any page URL",
      "authentication": "none"
    }
  },
  "authorization_classes": {
    "READ": "Autonomous. Returns published material with the URL each answer came from.",
    "ASSESS": "Autonomous. Deterministic scoring or routing over published instruments; the output says it is a self-assessment or a routing suggestion, never an audit, a certification or a compliance finding.",
    "WRITE": "Requires the user’s explicit confirmation before the call. No authentication today; rate limited server-side. Reaches a person, who decides what happens next.",
    "TRANSACTIONAL": "Requires the user’s explicit confirmation of the exact slot before the call. Writes to a real calendar and emails the attendee. No authentication today."
  },
  "never": [
    "quote or agree a price",
    "agree a scope, contract or delivery date",
    "state that anything is compliant, certified or approved by a regulator",
    "book or send without the user’s explicit confirmation"
  ]
}
