{
  "openapi": "3.1.0",
  "info": {
    "title": "BedrockTap",
    "version": "0.1.0-waitlist",
    "summary": "One MCP surface over 254 external data sources.",
    "description": "BedrockTap gives an agent a single MCP server that searches and fetches across 254 external data sources under one schema, with per-call cost estimates, a spend ceiling, and an auditable run ledger. It runs locally today. This page is the waitlist for hosted, remote access.\n\nSTATUS: in development, not yet hosted. /v1/health and /v1/sources answer. Every other /v1 path returns 501 not_yet_implemented and records the request until hosted access ships. The richer surface is MCP at POST /mcp.",
    "contact": {
      "email": "contact@bedrocktap.com",
      "url": "https://bedrocktap.com"
    }
  },
  "servers": [
    {
      "url": "https://bedrocktap.com"
    }
  ],
  "paths": {
    "/mcp": {
      "post": {
        "summary": "MCP over Streamable HTTP. Unauthenticated.",
        "description": "JSON-RPC 2.0. Supports initialize, tools/list and tools/call. Four tools are implemented (health, sources_list, run_begin, register_interest); the rest return not_yet_implemented.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON-RPC response."
          },
          "202": {
            "description": "Notification accepted."
          }
        }
      },
      "get": {
        "summary": "Server info: protocol, transport, tool statuses, instructions. Unauthenticated.",
        "description": "A plain GET returns the server description. `Accept: text/event-stream` is a client opening the server-initiated stream instead, and this server has nothing to push, so that case returns 405.",
        "responses": {
          "200": {
            "description": "Server info."
          },
          "405": {
            "description": "SSE stream requested; this server is POST-only."
          }
        }
      }
    },
    "/a/probe": {
      "get": {
        "summary": "Record an evaluation attempt. No auth, no side effects.",
        "description": "For agents that can fetch a URL but cannot open an MCP connection. Pass `need` describing what you were trying to do; pass `src` naming the surface that sent you here.",
        "parameters": [
          {
            "name": "need",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "What you are trying to do."
          },
          {
            "name": "src",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Which surface referred you."
          },
          {
            "name": "agent",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "What kind of agent you are."
          },
          {
            "name": "capability",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Capability you wanted."
          },
          {
            "name": "sources",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated source ids."
          }
        ],
        "responses": {
          "200": {
            "description": "Recorded."
          }
        }
      }
    },
    "/v1/health": {
      "get": {
        "summary": "Implementation status of every tool.",
        "responses": {
          "200": {
            "description": "Status."
          }
        }
      }
    },
    "/v1/sources": {
      "get": {
        "summary": "The real source catalogue, with routing guidance.",
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Filter to a capability domain, e.g. seo, geo, review-mining."
          }
        ],
        "responses": {
          "200": {
            "description": "Catalogue."
          }
        }
      }
    },
    "/v1/search": {
      "get": {
        "summary": "Search across data sources. IN DEVELOPMENT, NOT YET HOSTED.",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sources",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated source ids."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "501": {
            "description": "In development, not yet hosted. The request is recorded as a demand signal that sets the build order; no data is returned or invented.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "const": "not_yet_implemented"
                    },
                    "message": {
                      "type": "string"
                    },
                    "recorded": {
                      "type": "object",
                      "properties": {
                        "signalId": {
                          "type": "string"
                        }
                      }
                    },
                    "next_step": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/reviews": {
      "get": {
        "summary": "Reviews across G2, Capterra, Trustpilot and the app stores. IN DEVELOPMENT, NOT YET HOSTED.",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "platforms",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "minRating",
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "501": {
            "description": "In development, not yet hosted. The request is recorded as a demand signal that sets the build order; no data is returned or invented.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "const": "not_yet_implemented"
                    },
                    "message": {
                      "type": "string"
                    },
                    "recorded": {
                      "type": "object",
                      "properties": {
                        "signalId": {
                          "type": "string"
                        }
                      }
                    },
                    "next_step": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/estimate": {
      "get": {
        "summary": "Price a search without making it. IN DEVELOPMENT, NOT YET HOSTED.",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sources",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "501": {
            "description": "In development, not yet hosted. The request is recorded as a demand signal that sets the build order; no data is returned or invented.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "const": "not_yet_implemented"
                    },
                    "message": {
                      "type": "string"
                    },
                    "recorded": {
                      "type": "object",
                      "properties": {
                        "signalId": {
                          "type": "string"
                        }
                      }
                    },
                    "next_step": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/data/{sourceId}/fetch": {
      "post": {
        "summary": "Fetch the full payload behind a ref. IN DEVELOPMENT, NOT YET HOSTED.",
        "parameters": [
          {
            "name": "sourceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "501": {
            "description": "In development, not yet hosted. The request is recorded as a demand signal that sets the build order; no data is returned or invented.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "const": "not_yet_implemented"
                    },
                    "message": {
                      "type": "string"
                    },
                    "recorded": {
                      "type": "object",
                      "properties": {
                        "signalId": {
                          "type": "string"
                        }
                      }
                    },
                    "next_step": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/runs": {
      "post": {
        "summary": "Open a governed run with a spend ceiling. IN DEVELOPMENT, NOT YET HOSTED.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "501": {
            "description": "In development, not yet hosted. The request is recorded as a demand signal that sets the build order; no data is returned or invented.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string",
                      "const": "not_yet_implemented"
                    },
                    "message": {
                      "type": "string"
                    },
                    "recorded": {
                      "type": "object",
                      "properties": {
                        "signalId": {
                          "type": "string"
                        }
                      }
                    },
                    "next_step": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "x-mcp": {
    "endpoint": "https://bedrocktap.com/mcp",
    "transport": "streamable-http",
    "authentication": "none",
    "serverCard": "https://bedrocktap.com/.well-known/mcp.json"
  },
  "x-status": {
    "hosted": false,
    "whatIsLive": [
      "POST /mcp (discovery + demand tools)",
      "GET /a/probe",
      "GET /v1/health",
      "GET /v1/sources"
    ],
    "whyTheRestExists": "A call to an unimplemented capability, carrying real arguments, is the clearest possible statement of what to ship first. Those calls are recorded. None of them return fabricated data."
  }
}