{
  "$schema": "https://static.modelcontextprotocol.io/schemas/mcp-server-card/v1.json",
  "name": "Sociable AI Search",
  "serverUrl": "https://www.sociable.how/mcp",
  "version": "1.0",
  "protocolVersion": "2026-07-28",
  "serverInfo": {
    "name": "sociable-ai-search",
    "title": "Sociable AI Search",
    "version": "1.0.0"
  },
  "description": "Search indexed Instagram content with natural language and retrieve structured post, creator, analysis, and transcript context.",
  "iconUrl": "https://www.sociable.how/favicon.ico",
  "icon": "https://www.sociable.how/favicon.ico",
  "icons": [
    {
      "src": "https://www.sociable.how/favicon.ico",
      "mimeType": "image/x-icon"
    }
  ],
  "documentationUrl": "https://www.sociable.how/developers",
  "transport": {
    "type": "streamable-http",
    "endpoint": "https://www.sociable.how/mcp"
  },
  "capabilities": {
    "tools": {},
    "resources": {},
    "extensions": {
      "io.modelcontextprotocol/ui": {
        "mimeTypes": ["text/html;profile=mcp-app"]
      }
    }
  },
  "authentication": {
    "required": true,
    "schemes": ["bearer"],
    "documentationUrl": "https://www.sociable.how/auth.md"
  },
  "instructions": "List tools and resources without authentication. Send a Sociable AI Search API key as Authorization: Bearer <key> for tools/call. Keep credentials secret and treat indexed engagement counts as captured rather than live.",
  "tools": [
    {
      "name": "search_social_content",
      "title": "Search social content",
      "description": "Search indexed Instagram content with a natural-language request. Use for trend research, creator discovery, or candidate brand-engagement opportunities.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "maxLength": 500,
            "description": "Natural-language search with any topic, recency, audience, region, language, format, or exclusion constraints."
          },
          "reference": {
            "type": "object",
            "description": "Optional uploadId, mediaUrl, or Instagram permalink reference."
          },
          "idempotencyKey": {
            "type": "string",
            "description": "Stable key to reuse with the identical search body after a timeout."
          }
        },
        "anyOf": [{ "required": ["query"] }, { "required": ["reference"] }],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "_meta": {
        "ui": {
          "resourceUri": "ui://sociable-ai/search-results.html",
          "visibility": ["model", "app"]
        },
        "ui/resourceUri": "ui://sociable-ai/search-results.html"
      }
    },
    {
      "name": "create_reference_upload",
      "title": "Create reference-video upload target",
      "description": "Create a short-lived signed upload target for an MP4 reference video.",
      "inputSchema": {
        "type": "object",
        "required": ["fileName", "contentType", "sizeBytes"],
        "properties": {
          "fileName": { "type": "string" },
          "contentType": { "type": "string", "const": "video/mp4" },
          "sizeBytes": { "type": "integer", "minimum": 1, "maximum": 104857600 }
        },
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "get_social_post",
      "title": "Get social post detail",
      "description": "Retrieve structured post, creator, analysis, and transcript detail for a post ID returned by search.",
      "inputSchema": {
        "type": "object",
        "required": ["id"],
        "properties": {
          "id": { "type": "string", "minLength": 1 }
        },
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    }
  ],
  "resources": [
    {
      "uri": "ui://sociable-ai/search-results.html",
      "name": "Sociable AI search-results app",
      "description": "Sandboxed interactive result list for search_social_content output.",
      "mimeType": "text/html;profile=mcp-app",
      "_meta": {
        "ui": {
          "csp": {
            "connectDomains": [],
            "resourceDomains": [],
            "frameDomains": [],
            "baseUriDomains": []
          },
          "prefersBorder": true
        }
      }
    },
    {
      "uri": "https://www.sociable.how/openapi.json",
      "name": "Sociable AI Search API OpenAPI specification",
      "description": "OpenAPI 3.1 contract for the underlying Search API.",
      "mimeType": "application/json"
    },
    {
      "uri": "https://www.sociable.how/llms.txt",
      "name": "Sociable AI agent instructions",
      "description": "Product fit, limitations, operations, and safe-use guidance.",
      "mimeType": "text/plain"
    },
    {
      "uri": "https://www.sociable.how/auth.md",
      "name": "Sociable AI authentication guide",
      "description": "Bearer Search API key setup and error recovery.",
      "mimeType": "text/markdown"
    }
  ]
}
