forecall-cliCAUTION
Score how well an MCP server's tools are described for AI agents: the open-source linter and CLI behind forecall.dev
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
The open-source parts of Forecall: the linter that scores how well an MCP server's tools are described for the AI agents that read them, and the forecall command that runs it on your machine and connects your AI clients to the Forecall Failure KB.
npx forecall lint tools.json
Forecall lint · tools.json Scoring rules v2 Average score 42.5 / 100 Tools 2 Near-identical descriptions 0 Across the server No server-wide issues. Tools 6 / 100 search Purpose 6/20 · When to use 0/20 · Arguments 0/25 · Return value 0/15 · Constraints and side effects 0/10 · Examples 0/10 Major restates_name The description only restates the name (2 words). Major too_short The description is too short (2 words). Major no_usage_context Says nothing about when to use it, or when not to. Major param_no_description Arguments without a description: q. Minor loose_string_param String arguments with no constraint or example: q. Minor no_required No `required` list, so every argument is optional. Minor no_return_info Says nothing about what it returns. Minor no_constraints No constraints, side effects, auth or rate limits described, and no annotations. 79 / 100 get_forecast Purpose 17/20 · When to use 20/20 · Arguments 18/25 · Return value 7/15 · Constraints and side effects 7/10 · Examples 10/10 No issues.
The tools.json above
{
"tools": [
{
"name": "search",
"description": "Search records.",
"inputSchema": { "type": "object", "properties": { "q": { "type": "string" } } }
},
{
"name": "get_forecast",
"description": "Returns the weather forecast for a city for the next 7 days, with the high and low temperature in Celsius for each day. Use it when the user asks about13ae4001165eOBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add lint -- npx -y @forecall/[email protected]
{
"mcpServers": {
"lint": {
"command": "npx",
"args": [
"-y",
"@forecall/[email protected]"
]
}
}
}Exposed tools (20)
15 read · 1 write · 4 destructive. Blast radius: 4 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
C | read | C. |
DELETE_users_id | destructive | Remove a user. |
GET_users_id | read | Read one user. |
a | read | Same text. |
b | read | Same text.\n |
c | read | Other text. |
d | read | D. |
delete_page | destructive | Deletes a page. |
delete_record | destructive | Deletes a record. |
fetch | read | Fetches a page. |
fetch_page | read | Fetches a page by its URL. |
get_forecast | read | Returns the weather forecast for a city for the next days. |
get_user | read | Returns a user. |
opB | read | B. |
r1 | read | First. |
r2 | read | Second. |
search | read | Finds pages. |
search_users | read | Search users by name. Use this when you know part of a name; use get_user for an id. Returns up to 20 users as JSON. Example: search_users(query= |
update_page | write | Update one page. |
wipe | destructive | Delete everything. |
Trust audit
CAUTIONgrade B · trust 87/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- declared (1 observation(s))
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- found
Findings (7)
const SECRET = "sk-abcdefghijklmnop1234";
DELETE_users_id, delete_page, delete_record, wipe
streamable-http
const url = `http://127.0.0.1:${(server.address() as AddressInfo).port}/mcp`;base = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;const result = await readInput(file("bom.json", `${TOOLS}`), noStdin);"description": ""
Gates applied: no_behavioural_pass.
13ae4001165efull audit observations/trust-audit/mcp-server/forecall__forecall-cli.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | 13ae4001165e | CAUTION | B | 87 | first audit |
Questions
What is the forecall-cli MCP server?
Score how well an MCP server's tools are described for AI agents: the open-source linter and CLI behind forecall.dev
What tools does forecall-cli expose?
20 in total: 15 read-only, 1 that write, and 4 that can delete or overwrite (DELETE_users_id, delete_page, delete_record, wipe). Every one is listed on this page with its risk.
Is forecall-cli safe to connect to an agent?
With care. The audit graded it B (87/100) and found 7 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 4 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does forecall-cli need?
No credential environment variables were found in its source, so it appears to need none.
How does forecall-cli run?
It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as @forecall/lint at 0.4.1.
How current is this page?
The grade is for one exact copy of the source (13ae4001165e), read on 2026-10-11. The repository is watched and re-audited when it changes.