Scores how well MCP server tools are described for AI agents using an open-source linter and CLI.
Also known as forecall/forecall-cli, forecall
- Stars
- 0
- Tools
- —
- Downloads, 30 days
- —
- Latest version
- —
- Last commit
- Oct 18, 2026
- License
- Apache-2.0
What is forecall-cli MCP?
forecall-cli scores how well MCP server tools are described for AI agents using an open-source linter and CLI.
Summary generated from the project's README
About forecall-cli MCP server
Evaluating how well AI agents understand your MCP server tools is the primary function of forecall-cli. This open-source tool uses a linter to score tool descriptions based on six specific criteria, including purpose, usage context, argument descriptions, and return values. It helps developers identify issues like descriptions that are too short, missing constraints, or lacking examples, which can lead to agent errors.
Developers can run the linter locally using the forecall command via npx to analyze a tools.json file. The CLI provides detailed feedback on individual tool scores and server-wide issues. It can be integrated into CI/CD pipelines using GitHub Actions to automatically fail builds if scores fall below specific thresholds set by the --fail-under or --min-tool-score flags. The process is private, as nothing leaves your machine during the linting process, and no API keys are required for local use.
What you can do with it
- 1Audit tool descriptionsCheck a tools.json file to see how well an AI agent can interpret your server's functions.
- 2Identify missing argument detailsFind specific parameters that lack descriptions, constraints, or examples for the AI.
Written from the project's README. Every use case is checked against a quote from it.
How to install forecall-cli MCP
Formats verified 10 Nov 2026Add to CursorAdd to GooseInstall forecall-cli MCP in Claude Code
$ claude mcp add forecall-cli -- npx -y forecallInstall forecall-cli MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"forecall-cli": {
"command": "npx",
"args": [
"-y",
"forecall"
]
}
}
}Install forecall-cli MCP in VS Code
.vscode/mcp.json
{
"servers": {
"forecall-cli": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"forecall"
]
}
}
}Install forecall-cli MCP in VS Code CLI
$ code --add-mcp '{"name":"forecall-cli","type":"stdio","command":"npx","args":["-y","forecall"]}'Install forecall-cli MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"forecall-cli": {
"command": "npx",
"args": [
"-y",
"forecall"
]
}
}
}Install forecall-cli MCP in Codex
$ codex mcp add forecall-cli -- npx -y forecallInstall forecall-cli MCP in Codex config.toml
~/.codex/config.toml
[mcp_servers.forecall-cli] command = "npx" args = ["-y", "forecall"]
Install forecall-cli MCP in Gemini CLI
$ gemini mcp add -s user forecall-cli npx -- -y forecallInstall forecall-cli MCP in Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"forecall-cli": {
"command": "npx",
"args": [
"-y",
"forecall"
]
}
}
}Automated checks
Ran Nov 15, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachableforecall/forecall-cli is public and reachablegithub.com/forecall/forecall-cli ↗Pass
- Package names this repository as its sourceforecall names forecall/forecall-cli as sourcenpmjs.com/package/forecall ↗Pass
- Build provenance (Sigstore attestation)Sigstore attestation for forecallnpmjs.com/package/forecall/v/0.8.1#provenance ↗Pass
- Open source license (OSI)Apache-2.0spdx.org/licenses/Apache-2.0.html ↗Pass
- Commit or release in the last yearLast commit or release 2026-10-18github.com/forecall/forecall-cli ↗Pass
- OpenSSF ScorecardNot checked
- Package name not close to a popular packageNo popular package one edit away from forecallPass
- No critical advisory in the package or its dependenciesNot checked
- No hidden instructions to the model0 tool descriptions and the README read; no override phrases, credential paths or hidden charactersPass
- Destructive tools are labelledNot checked
- Remote endpoint answers the MCP handshakeNot checked
README
View on GitHubForecall CLI
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.
{
"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 about upcoming weather; for the current conditions, use get_current_weather instead. Example: city \"Tokyo\", days 3.",
"inputSchema": {
"type": "object",
"properties": {
"city": { "type": "string", "description": "The city's name, such as Tokyo." },
"days": { "type": "integer", "minimum": 1, "maximum": 7, "description": "How many days to return, 1 to 7." }
},
"required": ["city"]
},
"annotations": { "readOnlyHint": true }
}
]
}
Each tool is scored out of 100 on six parts, and the server as a whole is checked for too many
tools, near-identical descriptions and shared descriptions. Nothing leaves your machine. --json prints
the report as JSON. --fail-under <n> fails a CI job when the average is below n,
--min-tool-score <n> when any tool is, and --fail-on <severity> on any issue that severe. Get the
JSON from your own server with npx forecall dump, or paste it at
forecall.dev/en/lint for a page you can share.
| Package | npm | What it is |
|---|---|---|
packages/cli |
forecall |
The command: lint, dump, setup and hook |
packages/lint |
@forecall/lint |
The scoring, with no dependencies and no network |
How to use them: forecall.dev/en/docs/cli and each package's README. The Forecall service itself (the website, the dashboard, the API and the Failure KB's server) is not in this repository.
GitHub Action
Score your tools on every pull request, with the score and the findings in the job summary:
- uses: forecall/forecall-cli@v1
with:
file: tools.json # or url: https://… (a public Streamable HTTP server)
# or command: node build/index.js (your server over stdio)
min-tool-score: 40 # optional gates, as in the CLI
fail-on: critical
| Input | What it does |
|---|---|
file |
A tools/list JSON file, as forecall lint reads it |
url |
A public Streamable HTTP server to ask for its tools/list (forecall dump <url>) |
command |
A command that starts your server over stdio (forecall dump -- sh -c <command>) |
fail-under, min-tool-score, fail-on |
The CLI's gates: fail the step below an average, below a tool's score, or on a finding that severe |
lang |
en or ja for the report in the log (the job summary is in English) |
version |
The forecall version from npm (pinned by each release of the action) |
Give exactly one of file, url and command. The outputs are score (the average), tools
and report (the JSON report's path). It needs Node 22 or later on the runner, sends nothing to
Forecall and needs no key.
Development
The versions of Node.js and pnpm are in mise.toml.
mise install
pnpm install
pnpm check # Biome, the type checks and the tests of both packages and the action
pnpm formatformats and fixes what Biome can.pnpm --filter forecall buildwrites the command topackages/cli/dist/forecall.js; run it withnode packages/cli/dist/forecall.js lint <file>.node packages/lint/pack.ts <dir>andnode packages/cli/pack.ts <dir>make the tarballs npm would get, andscripts/try-package.sh <lint|cli> <tarball>installs one and runs it.LINT_VERSIONinpackages/lint/lint.tsis the version of the scoring rules. Any change that can give some input a different score, component, issue code or severity raises it, and updates the expected results inpackages/lint/fixtures/cases.json.
Releases
A pull request that raises a package's version starts the Release workflow when it lands on
main. The workflow stages every version npm does not have yet (@forecall/lint first) with
provenance, and each goes live only when a maintainer approves it on npm with 2FA. Maintainers can
also run the workflow by hand on main and pick one package.
The action is released apart from the packages: a maintainer publishes a GitHub Release v1.x.y
to the Marketplace and moves the v1 tag to it. A release that raises the action's pinned
forecall version says so, since a new rules version can move scores past a gate.
Contributing and security
See CONTRIBUTING.md. Report vulnerabilities privately, as SECURITY.md says, not in a public issue.
License
Apache-2.0. Copyright 2026 Mirai Studio, Inc. See LICENSE.
forecall-cli MCP questions
How do I add forecall-cli MCP to Claude Code?
Run claude mcp add forecall-cli -- npx -y forecall in your terminal. Add --scope user to make it available in every project.
How do I add forecall-cli MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
How can I score my MCP server tools?
You can use the command npx forecall lint tools.json to run the linter on your tools definition file.
Does the tool send my data to an external server?
No, the linter is designed so that nothing leaves your machine.
Can I use this in a CI/CD pipeline?
Yes, you can use the Forecall GitHub Action to score your tools on every pull request and set quality gates.
What metrics are used to score a tool?
Each tool is scored out of 100 based on purpose, usage context, arguments, return values, constraints/side effects, and examples.