# Bocha Web Search on SpecStream

Date: 2026-11-10

Client: the documented Web Search call (requests 2.34.2) and bocha-search-mcp's request

The one change:

```
https://api.bochaai.com/v1/web-search  becomes  https://api.specstream.ai/bocha/v1/web-search
```

## Request parameters

| Parameter | Sent | Result | Measured |
|---|---|---|---|
| `query` | `query=python programming language` | honoured | query run: python programming language |
| `count` | `count=5` | honoured | 5 results |
| `count (50)` | `count=50` | honoured | 50 results |
| `summary` | `summary=true` | honoured | 10 of 10 results with page text |
| `freshness (noLimit)` | `freshness=noLimit` | honoured | query run: python programming language |
| `freshness (oneDay)` | `freshness=oneDay` | honoured | query run: python programming language after:2026-11-09 |
| `freshness (oneWeek)` | `freshness=oneWeek` | honoured | query run: python programming language after:2026-11-03 |
| `freshness (oneMonth)` | `freshness=oneMonth` | honoured | query run: python programming language after:2026-10-10 |
| `freshness (oneYear)` | `freshness=oneYear` | honoured | query run: python programming language after:2025-11-09 |
| `freshness (range)` | `freshness=2025-01-01..2025-06-30` | honoured | query run: python programming language after:2025-01-01 before:2025-06-30 |
| `freshness (one day)` | `freshness=2025-03-04` | honoured | query run: python programming language after:2025-03-04 before:2025-03-04 |
| `include` | `include=wikipedia.org` | honoured | 10 of 10 on wikipedia.org |
| `include (a\|b)` | `include=wikipedia.org\|python.org` | honoured | query run: python programming language site:wikipedia.org OR site:python.org |
| `exclude` | `exclude=python.org,wikipedia.org` | honoured | 0 of 8 on python.org |

## Response fields

| Field | State |
|---|---|
| `code` | present |
| `log_id` | present |
| `msg` | present empty |
| `data._type` | present |
| `data.queryContext.originalQuery` | present |
| `data.webPages.webSearchUrl` | absent |
| `data.webPages.totalEstimatedMatches` | present |
| `data.webPages.someResultsRemoved` | absent |
| `data.webPages.value[].id` | present |
| `data.webPages.value[].name` | present |
| `data.webPages.value[].url` | present |
| `data.webPages.value[].displayUrl` | present |
| `data.webPages.value[].snippet` | present |
| `data.webPages.value[].summary` | present |
| `data.webPages.value[].siteName` | present |
| `data.webPages.value[].siteIcon` | absent |
| `data.webPages.value[].datePublished` | present |
| `data.webPages.value[].dateLastCrawled` | absent |
| `data.webPages.value[].cachedPageUrl` | absent |
| `data.webPages.value[].language` | absent |
| `data.webPages.value[].isFamilyFriendly` | absent |
| `data.webPages.value[].isNavigational` | absent |
| `data.images` | absent |
| `data.videos` | absent |

bocha-search-mcp's own request (summary true, freshness noLimit, count 10) read as its server reads it: 10 results, each with name, url, summary, datePublished and siteName.
