{
  "$schema": "https://static.modelcontextprotocol.io/schemas/mcp-server-card/v1.json",
  "version": "1.0",
  "protocolVersion": "2025-06-18",
  "serverInfo": {
    "name": "so-yesterday",
    "title": "so-yesterday.ai Knowledge Base",
    "version": "1.0.0"
  },
  "description": "Curated AI transformation knowledge base — video summaries, interconnected AI concepts, essays, daily digests, and AI transformation personas.",
  "iconUrl": "https://so-yesterday.ai/favicon.ico",
  "documentationUrl": "https://so-yesterday.ai/SKILL.md",
  "transport": {
    "type": "streamable-http",
    "endpoint": "/mcp"
  },
  "capabilities": {
    "tools": {},
    "resources": {},
    "prompts": {}
  },
  "authentication": {
    "required": "write tools only",
    "optional": "read tools accept anonymous or bearer",
    "metadata": "/.well-known/oauth-authorization-server",
    "preferred": "mcp_oauth_v2",
    "type": "bearer",
    "scheme": "Bearer <token>",
    "obtain_preferred": "mcpc login https://so-yesterday.ai/mcp",
    "obtain_legacy": "Run the RFC 8628 device flow at /api/oauth/device — see /.well-known/agent.json auth.device_flow_legacy. Deprecated: new integrations should use MCP OAuth 2.1.",
    "verify": "/api/auth/me",
    "note": "Read-only tools work anonymously. Write tools (put_personal_note, create_post, submit_post) require a bearer token. Preferred auth path: MCP OAuth 2.1 via `mcpc login https://so-yesterday.ai/mcp` or the /.well-known/oauth-authorization-server metadata endpoint.",
    "write_tool_scopes": {
      "put_personal_note": "personal_knowledge:write",
      "create_post": "posts:write",
      "submit_post": "posts:write"
    }
  },
  "instructions": "This MCP server provides access to an AI transformation knowledge base. Start with the 'search' tool or 'get_latest_digest' for recent developments. Use 'research_ai_topic' prompt for guided research. Read tools are anonymous; write tools require MCP OAuth 2.1 authentication.",
  "tools": [
    {
      "name": "get_latest",
      "title": "Get Latest Briefing",
      "description": "One-call briefing: latest daily digest (full content), recent highlighted videos with summaries, latest essays, and knowledge base stats. Best starting point for 'what's new in AI?'",
      "inputSchema": { "type": "object", "properties": {} }
    },
    {
      "name": "search",
      "title": "Search Knowledge Base",
      "description": "Search across all content types (videos, knowledge concepts, essays, digests, personas). Returns ranked results with snippets.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "description": "Search query" },
          "content_type": { "type": "string", "description": "Filter: video, knowledge, essay, digest, persona" },
          "limit": { "type": "integer", "description": "Max results (default 10)" }
        },
        "required": ["query"]
      }
    },
    {
      "name": "get_video",
      "title": "Get Video Summary",
      "description": "Get a video's executive summary, key points, and optionally the full transcript.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "video_id": { "type": "string" },
          "include_transcript": { "type": "boolean", "description": "Include full transcript (default false)" }
        },
        "required": ["video_id"]
      }
    },
    {
      "name": "list_videos",
      "title": "Browse Videos",
      "description": "Browse videos with optional filters by channel or tag.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "channel": { "type": "string" },
          "tag": { "type": "string" },
          "limit": { "type": "integer" },
          "offset": { "type": "integer" }
        }
      }
    },
    {
      "name": "get_knowledge",
      "title": "Get Knowledge Concept",
      "description": "Read a knowledge concept article with related concept links.",
      "inputSchema": {
        "type": "object",
        "properties": { "slug": { "type": "string" } },
        "required": ["slug"]
      }
    },
    {
      "name": "get_essay",
      "title": "Get Essay",
      "description": "Read a full original essay on AI transformation.",
      "inputSchema": {
        "type": "object",
        "properties": { "slug": { "type": "string" } },
        "required": ["slug"]
      }
    },
    {
      "name": "get_digest",
      "title": "Get Daily Digest",
      "description": "Read a daily digest of the 5 most important AI developments for a specific date.",
      "inputSchema": {
        "type": "object",
        "properties": { "date": { "type": "string", "description": "YYYY-MM-DD" } },
        "required": ["date"]
      }
    },
    {
      "name": "get_latest_digest",
      "title": "Get Latest Digest",
      "description": "Get the most recent daily digest. Good starting point for 'what's new in AI?'",
      "inputSchema": { "type": "object", "properties": {} }
    },
    {
      "name": "list_tags",
      "title": "List Tags",
      "description": "List all content tags with usage counts. Use to discover what topics are covered.",
      "inputSchema": { "type": "object", "properties": {} }
    },
    {
      "name": "get_knowledge_graph",
      "title": "Get Knowledge Graph",
      "description": "Get the knowledge graph as nodes (concepts) and edges (relationships). Use to understand how concepts relate to each other.",
      "inputSchema": { "type": "object", "properties": {} }
    },
    {
      "name": "put_personal_note",
      "title": "Write Personal Note",
      "description": "Write or update a personal knowledge note in the user's private GitHub-backed note store. Requires authentication (scope: personal_knowledge:write).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "slug": { "type": "string", "description": "Note identifier (alphanum + dot/dash/underscore, max 80)" },
          "content": { "type": "string", "description": "Markdown content (max 1 MB)" }
        },
        "required": ["slug", "content"]
      },
      "auth": { "required": true, "scope": "personal_knowledge:write" }
    },
    {
      "name": "create_post",
      "title": "Create Post",
      "description": "Create a draft post for community review. Requires authentication (scope: posts:write).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "title": { "type": "string" },
          "body": { "type": "string", "description": "Markdown body" },
          "tags": { "type": "array", "items": { "type": "string" } }
        },
        "required": ["title", "body"]
      },
      "auth": { "required": true, "scope": "posts:write" }
    },
    {
      "name": "submit_post",
      "title": "Submit Post for Review",
      "description": "Submit a draft post for moderator review. Triggers async AI triage. Requires authentication (scope: posts:write).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "post_id": { "type": "string" }
        },
        "required": ["post_id"]
      },
      "auth": { "required": true, "scope": "posts:write" }
    }
  ],
  "resources": [
    {
      "name": "channels",
      "title": "Tracked YouTube Channels",
      "uri": "so-yesterday://channels",
      "description": "List of tracked YouTube channels with video counts",
      "mimeType": "application/json"
    },
    {
      "name": "knowledge_index",
      "title": "Knowledge Concept Index",
      "uri": "so-yesterday://knowledge",
      "description": "Index of AI knowledge concepts (slug, title, tags, related)",
      "mimeType": "application/json"
    },
    {
      "name": "personas",
      "title": "AI Transformation Personas",
      "uri": "so-yesterday://personas",
      "description": "AI transformation personas (id, title, one_liner)",
      "mimeType": "application/json"
    }
  ],
  "prompts": [
    {
      "name": "research_ai_topic",
      "title": "Research AI Topic",
      "description": "Research an AI topic using the knowledge base — searches concepts, videos, and digests, then synthesizes a briefing.",
      "arguments": [
        { "name": "topic", "description": "The AI topic to research", "required": true }
      ]
    },
    {
      "name": "daily_briefing",
      "title": "Daily AI Briefing",
      "description": "Get the latest daily digest and summarize key AI developments with deeper context from knowledge concepts.",
      "arguments": []
    }
  ]
}
