> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bedrock.cv/llms.txt
> Use this file to discover all available pages before exploring further.

# Search

> Search across all project content using natural language.

Hybrid semantic + keyword search across all indexed content in a project. Returns raw text chunks with source context and relevance scores. Use this when you need results to reason over; use [`Ask`](/mcp/tools/ask) for a synthesized answer.

## When to Use

* Find content matching a natural language query (e.g., "fire-rated doors", "concrete specification")
* Retrieve raw text chunks to reason over in the agent's context
* Search across blocks, features, and files simultaneously
* The user asks to "find" or "search for" specific content

<Tip>
  Use `Search` when you need the raw results to do your own reasoning. Use [`Ask`](/mcp/tools/ask) when the user wants a direct answer to a question.
</Tip>

## Parameters

| Parameter      | Type      | Required | Description                                                                  |
| -------------- | --------- | -------- | ---------------------------------------------------------------------------- |
| `project_id`   | string    | yes      | Project ID to search within                                                  |
| `query`        | string    | yes      | Natural language search query (max 2000 chars)                               |
| `limit`        | number    | no       | Maximum results to return (default: 20, max: 50)                             |
| `source_types` | string\[] | no       | Filter by source type: `"block"`, `"feature"`, `"file"`. Omit to search all. |

## Response

```json theme={null}
{
  "total": 5,
  "results": [
    {
      "id": "block:blk_a101_notes",
      "content": "All fire-rated doors shall comply with NFPA 80 and be listed by UL or equivalent...",
      "context": {
        "sheet_number": "A-101",
        "block_type": "General Notes",
        "drawing_name": "Arch Set Rev B"
      },
      "score": 0.92,
      "source_type": "block",
      "source_id": "blk_a101_notes"
    },
    {
      "id": "feature:ftr_d104",
      "content": "Door 104, hollow metal, 45-min fire rating, hardware set HW-3",
      "context": {
        "sheet_number": "A-101",
        "block_type": "Plan",
        "feature_type": "door",
        "label": "104"
      },
      "score": 0.87,
      "source_type": "feature",
      "source_id": "ftr_d104"
    }
  ]
}
```

| Field                   | Type   | Description                                                   |
| ----------------------- | ------ | ------------------------------------------------------------- |
| `total`                 | number | Number of results returned                                    |
| `results[].id`          | string | Composite ID in `source_type:source_id` format                |
| `results[].content`     | string | Matched text chunk                                            |
| `results[].context`     | object | Source context (sheet number, block type, drawing name, etc.) |
| `results[].score`       | number | Relevance score (higher is more relevant)                     |
| `results[].source_type` | string | `"block"`, `"feature"`, or `"file"`                           |
| `results[].source_id`   | string | Entity ID for follow-up queries                               |

## Examples

### Search for fire-rated doors

```json theme={null}
{
  "project_id": "prj_abc",
  "query": "fire-rated doors"
}
```

### Search only in files

```json theme={null}
{
  "project_id": "prj_abc",
  "query": "concrete mix design specification",
  "source_types": ["file"],
  "limit": 10
}
```

## Related Tools

* [`Ask`](/mcp/tools/ask) - Get a synthesized answer instead of raw results
* [`Query`](/mcp/tools/query) - Structured queries when you know the exact entity and filters
