Tool hosting
Tools grav can offer a model. A tool is a row — one
kind executes it, so adding one needs no code change.
The cards below are the tool definitions as the model receives them —
kind, endpoint, auth, arguments, JSON schema, call counters.
Editing, enabling/disabling, deleting and test runs live in
Admin · + New and
/api/tools/<name>.
A tool that never ran here but is
manual
is normal: grav publishes its schema and the client executes it.
How a model gets these
Ask for the hosted tools on any chat completion, then run the call they lead to.
1 · advertise
curl http://rn.taskd.eu.org/proxy/ai/v1/chat/completions \
-H "Authorization: Bearer $PROXY_AUTH_KEY" \
-d '{"model":"<your-model>",
"messages":[{"role":"user","content":"scrape example.com"}],
"grav_tools":["firecrawl-scrape"]}'
grav_tools picks which hosted tools to advertise
(omit it for all enabled ones). A client that sends its own
tools always wins.
2 · execute
curl http://rn.taskd.eu.org/proxy/ai/v1/tools/call \
-H "Authorization: Bearer $PROXY_AUTH_KEY" \
-d '{"name":"firecrawl-scrape",
"arguments":{"url":"https://example.com"}}'
The tool_calls entry of a model answer works verbatim —
grav reads function.name /
function.arguments too.
firecrawl-scrape
HTTP request
published
no key
Scrape a single URL and return its content as markdown. A key is optional (keyless tier).
| Kind | http One request per call; use {{param}} in the url, headers, query or body. |
|---|---|
| Endpoint |
POST
https://api.firecrawl.dev/v2/scrape
|
| Auth | bearer |
| Arguments | url:string * formats:array = ['markdown'] onlyMainContent:boolean = True |
| JSON schema |
show{
"additionalProperties": false,
"properties": {
"formats": {
"default": [
"markdown"
],
"description": "Output formats, e.g. [\u0027markdown\u0027].",
"type": "array"
},
"onlyMainContent": {
"default": true,
"description": "Drop navigation / footer noise.",
"type": "boolean"
},
"url": {
"description": "The absolute URL to scrape.",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
}
|
firecrawl-search
HTTP request
published
no key
Search the web and return the top results with their content.
| Kind | http One request per call; use {{param}} in the url, headers, query or body. |
|---|---|
| Endpoint |
POST
https://api.firecrawl.dev/v2/search
|
| Auth | bearer |
| Arguments | query:string * limit:integer = 5 |
| JSON schema |
show{
"additionalProperties": false,
"properties": {
"limit": {
"default": 5,
"description": "How many results to return.",
"type": "integer"
},
"query": {
"description": "The search query.",
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
}
|
http-get
HTTP request
published
no key
Fetch any URL over GET and return the raw body as text.
| Kind | http One request per call; use {{param}} in the url, headers, query or body. |
|---|---|
| Endpoint |
GET
{{url}}
|
| Auth | none |
| Arguments | url:string * |
| JSON schema |
show{
"additionalProperties": false,
"properties": {
"url": {
"description": "Absolute http(s) URL to fetch.",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
}
|