# Search Sign Customiser documentation (`search_docs`)

Searches the published Sign Customiser API and connector reference and returns matching sections with their title, a short excerpt and the URL the section is documented at. It exists so an assistant can look up an enum values, a pricing-model rule, an operation required scope or an error code instead of guessing. It reads published documentation rather than the merchant Store, requires no scope beyond a valid connection, returns no Store data and has no side effects.

- Source URL: https://www.signcustomiser.com/help/mcp/tools/search_docs/
- Markdown URL: https://www.signcustomiser.com/help/mcp/tools/search_docs.md
- MCP endpoint: https://web.signcustomiser.com/mcp
- Required scope: none beyond a connected store
- Behaviour: read

## Purpose

Look up how Sign Customiser documents something, rather than inferring it from a tool result.

## Annotations

| Hint | Value |
| --- | --- |
| readOnlyHint | true |
| destructiveHint | false |
| idempotentHint | true |
| openWorldHint | true |

## Prerequisites

- A valid connection. No scope is required.

## Arguments

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `query` | string | yes | The words to look for. Matching is on term overlap against section titles, document names and body text, so a short phrase of the words you expect to appear works better than a question. |
| `limit` | integer | no | How many sections to return, between 1 and 20. Defaults to 5. |

## Result

At most `limit` sections, most relevant first, each with an excerpt truncated to 400 characters and the public URL of the page it came from. A query that matches nothing returns an empty list rather than unrelated sections.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `request_id` | string | yes |  |
| `store` | object | yes |  |
| `store.id` | integer | yes |  |
| `store.name` | string | yes |  |
| `query` | string | yes | The query that was searched, echoed back. |
| `results` | array of object | yes | The matching sections, most relevant first. |
| `results[].title` | string | yes |  |
| `results[].section` | string | yes | The document the section belongs to. |
| `results[].excerpt` | string | yes | The opening of the section, at most 400 characters. |
| `results[].url` | string | yes | Where the section is published. |

## Error cases

| Code | Recovery |
| --- | --- |
| `internal_error` | The reference artefact is not present in this deployment. Quote request_id when reporting it; no argument change will help. |
| `validation_failed` | query was empty or longer than 200 characters. Send a short phrase of the words you expect in the documentation. |

## Example: Look up how idempotent writes are retried

Request:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_docs",
    "arguments": {
      "query": "retry writes with idempotency",
      "limit": 1
    }
  }
}
```

Response:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "structuredContent": {
      "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t",
      "store": {
        "id": 12,
        "name": "Demo Signs"
      },
      "query": "retry writes with idempotency",
      "results": [
        {
          "title": "Retry writes with idempotency",
          "section": "Errors and retries",
          "excerpt": "Send an Idempotency-Key header on every write. Retrying the identical request with the same key replays the original response instead of executing again.",
          "url": "https://www.signcustomiser.com/help/api/guides/errors-and-retries/"
        }
      ]
    }
  }
}
```

## Example: An empty query (error)

Request:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_docs",
    "arguments": {
      "query": ""
    }
  }
}
```

Response:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "isError": true,
    "structuredContent": {
      "error": {
        "code": "validation_failed",
        "title": "Validation failed",
        "detail": "The query field is required.",
        "recovery": "Correct every field listed in errors, using its pointer to locate the value and allowed_values where one is given, then call the tool again.",
        "pointer": "/query"
      }
    }
  }
}
```
