{
  "schemaVersion": "2025-06-18",
  "serverInfo": {
    "name": "bopen-ai",
    "version": "1.0.0",
    "title": "bOpen.ai Marketplace",
    "description": "In-page WebMCP for marketplace, commerce, and private social drafts. These listed social tools exist only when a bOpen.ai page exposes document.modelContext. The remote /mcp server is a read-only catalog and has no social-write tools. Remote agents use auth.md plus direct REST with social:draft; only the signed-in user can schedule or publish.",
    "homepageUrl": "https://bopen.ai",
    "sourceUrl": "https://github.com/b-open-io/bopen-ai"
  },
  "transport": {
    "type": "webmcp",
    "description": "Use these tools only when the current page exposes tools registered with document.modelContext.registerTool(). Otherwise do not use Chrome/CDP or automate the claim page: remote agents must follow /auth.md and call the direct REST API. /mcp remains catalog-read-only.",
    "decisionRule": "If in-page WebMCP social tools are available, use them. Otherwise use auth.md plus direct REST with social:draft. Never use Chrome/CDP or claim-page automation.",
    "streamableHttp": "https://bopen.ai/mcp",
    "streamableHttpCapabilities": "read-only catalog; no social writes",
    "httpFallback": {
      "apiCatalog": "https://bopen.ai/.well-known/api-catalog",
      "openApi": "https://bopen.ai/api/openapi.json",
      "mcp": "https://bopen.ai/mcp"
    }
  },
  "capabilities": {
    "tools": {
      "listChanged": false
    },
    "prompts": {
      "listChanged": false
    },
    "resources": {
      "listChanged": false
    },
    "logging": {}
  },
  "tools": [
    {
      "name": "list_marketplace",
      "description": "List every plugin, agent, and skill available in the bOpen.ai marketplace.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false
      }
    },
    {
      "name": "get_plugin",
      "description": "Fetch a single bOpen.ai marketplace plugin by name, including its agents, skills, and install string.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Plugin name (e.g. sigma-auth)."
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false
      }
    },
    {
      "name": "get_skill",
      "description": "Fetch a single bOpen.ai marketplace skill by name. Pass plugin when the skill name is shared across plugins.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Skill name, or plugin:skill id (e.g. confess or core:confess)."
          },
          "plugin": {
            "type": "string",
            "description": "Plugin that owns the skill, when name is not qualified."
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false
      }
    },
    {
      "name": "search_marketplace",
      "description": "Search the bOpen.ai marketplace snapshot for matching plugins, skills, and agents.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "description": "Search query (min 2 chars)."
          }
        },
        "required": [
          "q"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false
      }
    },
    {
      "name": "get_agent",
      "description": "Fetch skills and metadata for a single bOpen.ai agent by its id (plugin:agent-name).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Agent id in the form plugin:agent-name."
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false
      }
    },
    {
      "name": "search_agents",
      "description": "Search bOpen.ai agents by keyword. Matches system prompts and referenced skill content.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "description": "Search query (min 2 chars)."
          }
        },
        "required": [
          "q"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false
      }
    },
    {
      "name": "search_tool_shed",
      "description": "Search the bOpen.ai Tool Shed catalog for developer tools.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20
          }
        },
        "required": [
          "q"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false
      }
    },
    {
      "name": "list_products",
      "description": "List bOpen.ai commerce products with live sale and release status. Stripe secret IDs are not included. If onSale is false, start_checkout will return the existing 409.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false
      }
    },
    {
      "name": "get_product",
      "description": "Fetch one bOpen.ai commerce product by id, including price, checkoutMode, rails, and whether it is on sale.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "commerce_products id (e.g. chat-pro, pack-full-suite, agent-master-desktop)."
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false
      }
    },
    {
      "name": "start_checkout",
      "description": "Start a live purchase for a product id. Confirms with the user, then POSTs the existing /api/checkout/{productId} route (or /api/bsv/checkout/{productId} when rail=bsv) and navigates to the returned Stripe URL. Flag and release gates stay on those routes.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string",
            "description": "commerce_products id to buy."
          },
          "rail": {
            "type": "string",
            "enum": [
              "stripe",
              "bsv"
            ],
            "description": "Payment rail. Defaults to stripe."
          },
          "email": {
            "type": "string",
            "description": "Buyer email. Required when rail is bsv."
          }
        },
        "required": [
          "productId"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false
      }
    },
    {
      "name": "list_social_accounts",
      "description": "List the signed-in user's linked X accounts so an agent can choose an account id for a draft.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false
      }
    },
    {
      "name": "list_social_drafts",
      "description": "List the signed-in user's X posts, including drafts and planned posts for review. This cannot schedule or publish anything.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "account": {
            "type": "string",
            "description": "Optional linked account id."
          },
          "from": {
            "type": "string",
            "format": "date-time"
          },
          "to": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false
      }
    },
    {
      "name": "create_social_draft",
      "description": "Create an editable X draft for the signed-in user. The user must review and schedule or post it themselves.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "accountId": {
            "type": "string",
            "description": "Linked X account id."
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "description": "One item per tweet in thread order.",
            "items": {
              "type": "object",
              "properties": {
                "text": {
                  "type": "string",
                  "description": "Tweet text."
                },
                "media": {
                  "type": "array",
                  "maxItems": 4,
                  "description": "Optional private image ids returned by POST /api/social/media.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "text"
              ],
              "additionalProperties": false
            }
          },
          "tz": {
            "type": "string",
            "description": "Optional IANA timezone, such as America/Detroit."
          }
        },
        "required": [
          "accountId",
          "items"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false
      }
    },
    {
      "name": "upload_social_image",
      "description": "Upload one private PNG, JPEG, GIF, or WebP image for a social draft. Pass a base64 data URL, then use the returned media id in create_social_draft or update_social_draft. The user still controls scheduling and posting.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "dataUrl": {
            "type": "string",
            "description": "A base64 image data URL up to 10 MB, for example data:image/png;base64,..."
          }
        },
        "required": [
          "dataUrl"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false
      }
    },
    {
      "name": "update_social_draft",
      "description": "Replace the text and image order in one of the signed-in user's draft or planned X posts. Scheduled posts must be edited from their private review page; this tool cannot schedule or publish.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Social post id."
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "description": "Complete replacement thread in tweet order.",
            "items": {
              "type": "object",
              "properties": {
                "text": {
                  "type": "string",
                  "description": "Tweet text."
                },
                "media": {
                  "type": "array",
                  "maxItems": 4,
                  "description": "Optional private image ids returned by POST /api/social/media.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "text"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "id",
          "items"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false
      }
    },
    {
      "name": "subscribe_newsletter",
      "description": "Subscribe an email address to the bOpen.ai newsletter.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Email address to subscribe to the newsletter."
          }
        },
        "required": [
          "email"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": false,
        "destructiveHint": false
      }
    }
  ],
  "meta": {
    "oauth": {
      "authorizationServer": "https://bopen.ai/.well-known/oauth-authorization-server",
      "protectedResource": "https://bopen.ai/.well-known/oauth-protected-resource"
    },
    "socialDrafting": {
      "inPage": "WebMCP tools listed in this card",
      "remote": "https://bopen.ai/auth.md#social-drafting-quickstart",
      "review": "https://bopen.ai/social"
    },
    "agentSkillsIndex": "https://bopen.ai/.well-known/agent-skills/index.json"
  }
}