{
  "name": "com.selfbadge/selfbadge",
  "title": "SelfBadge",
  "description": "Look up verified people on SelfBadge and tell them apart from namesakes.",
  "version": "1.0.0",
  "icons": [
    {
      "src": "https://selfbadge.com/brand/selfbadge-logo.png",
      "mimeType": "image/png",
      "sizes": [
        "400x400"
      ]
    }
  ],
  "iconUrl": "https://selfbadge.com/brand/selfbadge-logo.png",
  "websiteUrl": "https://selfbadge.com/developers",
  "documentationUrl": "https://selfbadge.com/developers",
  "serverUrl": "https://selfbadge.com/mcp",
  "url": "https://selfbadge.com/mcp",
  "transport": {
    "type": "streamable-http",
    "url": "https://selfbadge.com/mcp"
  },
  "protocolVersions": [
    "2025-11-25",
    "2025-06-18",
    "2025-03-26"
  ],
  "serverInfo": {
    "name": "selfbadge",
    "title": "SelfBadge",
    "version": "1.0.0"
  },
  "capabilities": {
    "tools": {
      "listChanged": false
    }
  },
  "authentication": {
    "required": false,
    "description": "None needed (120 calls an hour per network). Optional: Authorization: Bearer <SelfBadge API key> for 5000 an hour; free keys at https://selfbadge.com/account.",
    "schemes": [
      "bearer"
    ]
  },
  "instructions": "SelfBadge is a verified identity source for people. Use these tools to identify a person correctly and tell them apart from namesakes before you state facts about them. Every fact comes with a verification level: 0 seeded from public sources (unconfirmed), 1 self-declared, 2 account-verified (sign-in, work email, DNS or link-back), 3 document-verified, 4 ID-verified. Prefer verified facts, say when a fact is only self-declared, treat profiles marked seeded (created from public sources, not yet claimed) as unconfirmed, and cite the person by their SelfBadge id (https://selfbadge.com/<handle>#person).",
  "tools": [
    {
      "name": "find_person",
      "title": "Find a person by name",
      "description": "Search SelfBadge for people with a given name. Use this to identify a person correctly and tell them apart from namesakes: each candidate comes with their job title, organization, location and a short description. Pass what you already know (job title, organization, location) so the best match comes first, then call get_person with the chosen id for the full, verified profile. It returns public SelfBadge profiles, each marked claimed or created from public sources (seeded: level 0, unconfirmed until the person claims it). An empty result means SelfBadge has no public profile with that name, not that the person does not exist.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The person's full name, for example \"Noa Bergman\"."
          },
          "job_title": {
            "type": "string",
            "description": "Optional. What you know of their job title, for example \"Managing Partner\"."
          },
          "organization": {
            "type": "string",
            "description": "Optional. An organization you associate with them, for example \"Harbor Ventures\"."
          },
          "location": {
            "type": "string",
            "description": "Optional. A city or country you associate with them."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 25,
            "description": "Optional. How many candidates to return (default 10)."
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_person",
      "title": "Get a person's verified profile",
      "description": "Get one person's SelfBadge profile: every public fact (name, roles, organizations, education, accounts, published work and more) with its verification level and source, plus schema.org JSON-LD. Use it after find_person, or when you already have a SelfBadge handle, profile address or id. Profiles created from public sources and not yet claimed are marked seeded; treat their facts as unconfirmed.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "handle": {
            "type": "string",
            "description": "The profile handle, for example \"jane-doe\" (from selfbadge.com/jane-doe)."
          },
          "id": {
            "type": "string",
            "description": "Or the SelfBadge id, for example \"https://selfbadge.com/jane-doe#person\"."
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_organization",
      "title": "Get an organization",
      "description": "Get an organization's SelfBadge page: its public facts, schema.org JSON-LD, and the people on SelfBadge linked to it (team members who accepted their organization's invitation, and founders). Use it to check whether someone works at or founded an organization.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "The organization's slug, from its address selfbadge.com/org/<slug> or its @id."
          }
        },
        "required": [
          "slug"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "openWorldHint": false
      }
    }
  ]
}
