Skip to content

Tool hosting

Tools grav can offer a model. A tool is a row — one kind executes it, so adding one needs no code change.

3 tools 3 published
Tools
3
3 run here
Enabled
3
all published to models
Calls
0
0 errors
Kinds installed
0
one file + one line each

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
0 calls idle

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"
}
Read only — editing lives in /api/tools/firecrawl-scrape.
Edit on Admin

http-get

HTTP request published no key
0 calls idle

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"
}
Read only — editing lives in /api/tools/http-get.
Edit on Admin