{"schema_version":"1.0","provider":{"name":"Better Search","description":"A hosted web search and URL-to-Markdown tool provider for LLM tool-calling systems."},"base_url":"http://search.joemulcahy.com","authentication":{"type":"bearer","header":"Authorization","description":"Pass your API key as: Authorization: Bearer <api_key>"},"conventions":{"content_type":"application/json","tool_execution":"POST the tool arguments to the mapped endpoint URL with bearer auth."},"usage_guidance":{"search_then_fetch":"Use search_web first to shortlist candidates, then fetch_url only for the 1-3 most relevant pages.","max_fetches_per_answer":"Prefer at most 3 fetch_url calls for a single answer unless the task explicitly requires deeper source review.","search_strategy":"Ask narrow, descriptive queries instead of broad retries to keep search cost and captcha risk lower."},"recommended_limits":{"default_num_results":5,"recommended_max_fetches_per_answer":3},"openai":{"tools":[{"type":"function","function":{"name":"search_web","description":"Search the web and return structured organic results with titles, URLs, snippets, and optional dates.","parameters":{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"The search query string."},"num_results":{"type":"integer","description":"Number of results to return (1–20). Defaults to 5.","minimum":1,"maximum":20,"default":5},"bypass_cache":{"type":"boolean","description":"When true, skip cache and force a fresh search.","default":false},"max_cache_age_seconds":{"type":"integer","description":"Only use cached data if it is no older than this many seconds.","minimum":0}}}}},{"type":"function","function":{"name":"fetch_url","description":"Fetch a webpage and return its main content as clean Markdown optimized for LLM context windows.","parameters":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"The URL to fetch and convert to Markdown."},"bypass_cache":{"type":"boolean","description":"When true, skip cache and force a fresh fetch.","default":false},"max_cache_age_seconds":{"type":"integer","description":"Only use cached data if it is no older than this many seconds.","minimum":0}}}}}]},"anthropic":{"tools":[{"name":"search_web","description":"Search the web and return structured organic results with titles, URLs, snippets, and optional dates.","input_schema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"The search query string."},"num_results":{"type":"integer","description":"Number of results to return (1–20). Defaults to 5.","minimum":1,"maximum":20},"bypass_cache":{"type":"boolean","description":"When true, skip cache and force a fresh search."},"max_cache_age_seconds":{"type":"integer","description":"Only use cached data if it is no older than this many seconds.","minimum":0}}}},{"name":"fetch_url","description":"Fetch a webpage and return its main content as clean Markdown optimized for LLM context windows.","input_schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"The URL to fetch and convert to Markdown."},"bypass_cache":{"type":"boolean","description":"When true, skip cache and force a fresh fetch."},"max_cache_age_seconds":{"type":"integer","description":"Only use cached data if it is no older than this many seconds.","minimum":0}}}}]},"endpoints":[{"tool_name":"search_web","method":"POST","path":"/api/search","url":"http://search.joemulcahy.com/api/search","auth_required":true,"request_schema":{"type":"object","required":["query"],"properties":{"query":{"type":"string"},"num_results":{"type":"integer","minimum":1,"maximum":20,"default":5},"bypass_cache":{"type":"boolean","default":false},"max_cache_age_seconds":{"type":"integer","minimum":0}}},"response":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"url":{"type":"string"},"snippet":{"type":"string"},"published_date":{"type":"string"}}}},"cached":{"type":"boolean"},"cached_at":{"type":"string"},"cache_age_seconds":{"type":"integer"}}},"example_request":{"query":"latest fastify best practices","num_results":5,"max_cache_age_seconds":300}},{"tool_name":"fetch_url","method":"POST","path":"/api/fetch","url":"http://search.joemulcahy.com/api/fetch","auth_required":true,"request_schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"},"bypass_cache":{"type":"boolean","default":false},"max_cache_age_seconds":{"type":"integer","minimum":0}}},"response":{"type":"object","properties":{"url":{"type":"string"},"title":{"type":"string"},"markdown":{"type":"string"},"word_count":{"type":"integer"},"cached":{"type":"boolean"},"cached_at":{"type":"string"},"cache_age_seconds":{"type":"integer"}}},"example_request":{"url":"https://example.com","bypass_cache":true}}]}