{
  "$schema": "https://static.modelcontextprotocol.io/schemas/draft/server-card.schema.json",
  "name": "io.taggdp/public-knowledge",
  "title": "TAG.GDP Public Knowledge",
  "description": "Discovery card for Talal Abu-Ghazaleh Global Digital Polytechnic (TAG.GDP / TAGGDP / GDPT). Prefer llms.txt, OpenAPI, RSS, and documented public REST endpoints. A live MCP Streamable HTTP transport is not required for read-only discovery.",
  "version": "1.0.0",
  "websiteUrl": "https://taggdp.global",
  "serverInfo": {
    "name": "io.taggdp/public-knowledge",
    "version": "1.0.0",
    "description": "TAG.GDP public knowledge and catalog discovery for AI agents. Tools below map to public HTTP JSON operations (OpenAPI) rather than a live MCP JSON-RPC session."
  },
  "icons": [
    {
      "src": "https://taggdp.global/assets/logo.png",
      "mimeType": "image/png"
    }
  ],
  "remotes": [],
  "capabilities": {
    "tools": {
      "listChanged": false
    },
    "resources": {
      "subscribe": false,
      "listChanged": false
    }
  },
  "tools": [
    {
      "name": "list_categories",
      "description": "List public certification categories (AI, Cybersecurity, and nested tracks).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "lang": {
            "type": "string",
            "description": "Optional language code (en, ar, fr, es, zh).",
            "default": "en"
          }
        }
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "_meta": {
        "http": {
          "method": "GET",
          "path": "/api/public/categories"
        }
      }
    },
    {
      "name": "list_courses",
      "description": "List public courses available for enrollment discovery.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "lang": { "type": "string", "default": "en" }
        }
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true
      },
      "_meta": {
        "http": {
          "method": "GET",
          "path": "/api/public/courses"
        }
      }
    },
    {
      "name": "get_course",
      "description": "Fetch a single public course by slug.",
      "inputSchema": {
        "type": "object",
        "required": ["slug"],
        "properties": {
          "slug": { "type": "string" },
          "lang": { "type": "string", "default": "en" }
        }
      },
      "annotations": {
        "readOnlyHint": true,
        "idempotentHint": true
      },
      "_meta": {
        "http": {
          "method": "GET",
          "path": "/api/public/courses/{slug}"
        }
      }
    },
    {
      "name": "list_news",
      "description": "List recent TAG.GDP news articles (also available via RSS at /feed.xml).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": { "type": "integer", "default": 10, "minimum": 1, "maximum": 50 },
          "lang": { "type": "string", "default": "en" }
        }
      },
      "annotations": {
        "readOnlyHint": true,
        "idempotentHint": true
      },
      "_meta": {
        "http": {
          "method": "GET",
          "path": "/api/public/news"
        }
      }
    },
    {
      "name": "get_page",
      "description": "Fetch a published CMS page by slug (about, admissions, support, etc.).",
      "inputSchema": {
        "type": "object",
        "required": ["slug"],
        "properties": {
          "slug": { "type": "string" },
          "lang": { "type": "string", "default": "en" }
        }
      },
      "annotations": {
        "readOnlyHint": true,
        "idempotentHint": true
      },
      "_meta": {
        "http": {
          "method": "GET",
          "path": "/api/public/pages/{slug}"
        }
      }
    },
    {
      "name": "list_faqs",
      "description": "Retrieve public FAQs grouped by category.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "annotations": {
        "readOnlyHint": true,
        "idempotentHint": true
      },
      "_meta": {
        "http": {
          "method": "GET",
          "path": "/api/public/faqs"
        }
      }
    },
    {
      "name": "search_site",
      "description": "Search public site content.",
      "inputSchema": {
        "type": "object",
        "required": ["q"],
        "properties": {
          "q": { "type": "string", "minLength": 1 },
          "lang": { "type": "string", "default": "en" }
        }
      },
      "annotations": {
        "readOnlyHint": true,
        "idempotentHint": true
      },
      "_meta": {
        "http": {
          "method": "GET",
          "path": "/api/public/search"
        }
      }
    },
    {
      "name": "verify_certificate",
      "description": "Verify a digitally issued TAG.GDP certificate by public code.",
      "inputSchema": {
        "type": "object",
        "required": ["code"],
        "properties": {
          "code": { "type": "string", "minLength": 3 }
        }
      },
      "annotations": {
        "readOnlyHint": true,
        "idempotentHint": true
      },
      "_meta": {
        "http": {
          "method": "GET",
          "path": "/api/public/certificates/{code}"
        }
      }
    },
    {
      "name": "get_site_docs",
      "description": "Fetch machine-oriented site documentation (llms.txt).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "full": {
            "type": "boolean",
            "default": false,
            "description": "When true, fetch llms-full.txt instead of llms.txt"
          }
        }
      },
      "annotations": {
        "readOnlyHint": true,
        "idempotentHint": true
      },
      "_meta": {
        "http": {
          "method": "GET",
          "path": "/llms.txt"
        }
      }
    }
  ],
  "resources": [
    {
      "name": "llms.txt",
      "uri": "https://taggdp.global/llms.txt",
      "mimeType": "text/plain"
    },
    {
      "name": "llms-full.txt",
      "uri": "https://taggdp.global/llms-full.txt",
      "mimeType": "text/plain"
    },
    {
      "name": "openapi",
      "uri": "https://taggdp.global/openapi.json",
      "mimeType": "application/json"
    },
    {
      "name": "sitemap",
      "uri": "https://taggdp.global/sitemap.xml",
      "mimeType": "application/xml"
    },
    {
      "name": "news-feed",
      "uri": "https://taggdp.global/feed.xml",
      "mimeType": "application/rss+xml"
    },
    {
      "name": "homepage-markdown",
      "uri": "https://taggdp.global/index.md",
      "mimeType": "text/markdown"
    }
  ],
  "errorHandling": {
    "httpStatusCodes": {
      "400": "Invalid request parameters — fix inputs before retrying.",
      "404": "Resource not found — do not retry the same path.",
      "429": "Rate limited — honour Retry-After when present; exponential backoff recommended.",
      "500": "Transient server error — retry with backoff up to 3 attempts.",
      "503": "Service unavailable — retry later with backoff."
    },
    "retry": {
      "strategy": "exponential_backoff",
      "maxAttempts": 3,
      "initialDelayMs": 500,
      "maxDelayMs": 8000,
      "retryOn": [500, 502, 503, 504],
      "doNotRetryOn": [400, 401, 403, 404]
    },
    "rateLimits": {
      "publicRead": {
        "description": "Public GET endpoints are lightly rate-limited at the edge/API. Prefer caching OpenAPI, llms.txt, and feed.xml.",
        "suggestedClientLimit": "60 requests / minute / IP for catalog and news reads"
      },
      "writeEndpoints": {
        "description": "Authenticated or form POST endpoints (contact, applications, checkout) use stricter throttles (often 6–10 / minute).",
        "note": "Not exposed as MCP tools in this card."
      }
    },
    "errorShape": {
      "contentType": "application/json",
      "example": { "message": "Page not found" }
    }
  },
  "_meta": {
    "io.taggdp/discovery": {
      "llmsTxt": "https://taggdp.global/llms.txt",
      "llmsFullTxt": "https://taggdp.global/llms-full.txt",
      "openapi": "https://taggdp.global/openapi.json",
      "sitemap": "https://taggdp.global/sitemap.xml",
      "rssFeed": "https://taggdp.global/feed.xml",
      "agentCard": "https://taggdp.global/.well-known/agent-card.json",
      "agentSkills": "https://taggdp.global/.well-known/agent-skills/index.json",
      "publicApiBase": "https://taggdp.global/api/public",
      "note": "Tools are declarative mappings to public HTTP JSON. publicApiBase must match the production API origin used by the SPA when hosts differ."
    }
  }
}
