← MCP servers · evalstate

Fast Agent

CAUTIONgrade F · trust 49/100

Code, Build and Evaluate agents - excellent Model and Skills/MCP/ACP/A2A Support

a2aacpagentagent frameworkagent skillsclimcpmcp client

Overview

From the repository's own README, as read at the audited commit.

<p align="center"><a href="https://pypi.org/project/fast-agent-mcp/"><img src="https://img.shields.io/pypi/v/fast-agent-mcp?color=%2334D058&label=pypi" /></a><a href="#"><img src="https://github.com/evalstate/fast-agent/actions/workflows/main-checks.yml/badge.svg" /></a><a href="https://github.com/evalstate/fast-agent/issues"><img src="https://img.shields.io/github/issues-raw/evalstate/fast-agent" /></a><a href="https://discord.gg/xg5cJ7ndN6"><img src="https://img.shields.io/discord/1358470293990936787" alt="discord" /></a><img alt="Pepy Total Downloads" src="https://img.shields.io/pepy/dt/fast-agent-mcp?label=pypi%20%7C%20downloads"/><a href="https://github.com/evalstate/fast-agent-mcp/blob/main/LICENSE"><img src="https://img.shields.io/pypi/l/fast-agent-mcp" /></a></p>## Start Here> [!TIP]> Please see https://fast-agent.ai for latest documentation.**`fast-agent`** is a flexible way to interact with LLMs, excellent for use as a Coding Agent, Development Toolkit, Evaluation or Workflow platform.To start an interactive session with shell support, install [uv](https://astral.sh/uv) and run```bashuvx fast-agent-mcp@latest -x```To start coding with Hugging Face inference providers or use your OpenAI Codex plan:```bash# Code with Hugging Face Inference Providersuvx fast-agent-mcp@latest --pack hf-dev# Code with Codex (agents optimized for OpenAI)uvx fast-agent-mcp@latest --pack codex```Enter a shell with `!`, or run shell commands e.g. `! cd web && npm run build`.Manage skills with the `/skills` command, and connect to MCP Servers with `/connect`. The default **`fast-agent`** registry contains skills to let you set up LSP, Agent and Tool Hooks, Compaction strategies, Automation and more.```bash# /connect supports stdio or streamable http (with OAuth)# Start a STDIO server/connect @modelcontextprotocol/server-everything# Connect to a Streamable HTTP Server/connect https://huggingface.co/mcp```It's recommended to install **`fast-agent`** to set up the shell aliases and oth

Connect

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. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add fast-agent-mcp --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env CODEX_API_KEY=${CODEX_API_KEY} --env CODEX_AUTH_JSON_PATH=${CODEX_AUTH_JSON_PATH} --env DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY} -- uvx fast-agent-mcp
claude-desktop
{
  "mcpServers": {
    "fast-agent-mcp": {
      "command": "uvx",
      "args": [
        "fast-agent-mcp"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
        "CODEX_API_KEY": "${CODEX_API_KEY}",
        "CODEX_AUTH_JSON_PATH": "${CODEX_AUTH_JSON_PATH}",
        "DEEPSEEK_API_KEY": "${DEEPSEEK_API_KEY}"
      }
    }
  }
}

Exposed tools (85) 75 read · 10 write · 0 destructive

ToolRiskDescription
a3_structured_reportreaditems = [f
a3_trigger_tool_updatewriteglobal _EXTRA_TOOL_ADDED
a3_unstructured_echoreadreturn f
add_dynamic_appwriteif
add_dynamic_toolwriteif
agent__childreadbase
alphareadfirst alphabetically
base_toolreadbase
calculate_dividereadif b == 0:
calculate_productreadreturn f
calculate_sumreadreturn f
capitalize_stringreadreturn text.upper()
check_weatherreadCheck the weather in a given city.
client_capabilitiesreadExpose the capabilities the modern client supplied for this call.
coding_camel_casereadreturn text.title().replace(
coding_kebab_casereadreturn text.lower().replace(
coding_snake_casereadreturn text.lower().replace(
const_modereadDemonstrates a tool schema that includes a const constraint.
create_profilewritereturn f
echoreadEcho back the input
echo_valuereadEcho a value.
executewriteRun shell command
feedbackreadRequest rating and feedback fields.
fetch_magic_stringreadReturns the daily passphrase when the assistant must call a tool.
fetch_secretreadAsk the client model to call ``get_secret`` and return its final answer.
get_imagereadtry:
get_pdfreadtry:
get_secretreadReturns a secret code. You must call this tool to get the secret.
get_statusreadreturn
get_video_linkreadReturn a ResourceLink to a video.
getlinkreadreturn ResourceLink(
guessreadif guess < secret_number:
implementationreadassert ctx.session.client_params is not None,
initial_appreadreturn
list_tools_call_countreadreturn server.list_tools_calls
lookupreadLookup data.
lookup_probe_payloadreadReturn the probe payload for validation.
lowercase_stringreadreturn text.lower()
math_addwritereturn f
math_multiplyreadreturn f
math_subtractreadreturn f
my-toolreaddemo
open_workspacereadreturn
pingreadreturn
preferencesreadRequest enum-based preferences.
progress_taskread
progress_task_no_messageread
progress_task_with_helperread
random_case_stringreadreturn
random_numberwriteimport random
random_stringreadreturn
read_resource_call_countreadreturn server.read_resource_calls
read_text_filereadRead a text file
render_invalid_widgetreadreturn
render_missing_widgetreadreturn
render_valid_widgetreadreturn
request_console_accessreadRequest navigation consent without claiming external authorization completed.
reverse_stringreadreturn text[::-1]
samplereadTool that echoes back the input parameter
sample_manyreadTool that echoes back the input parameter
sample_parallelreadTool that makes multiple concurrent sampling requests to test parallel processing
sample_with_imagereadresult = await ctx.session.create_message( # ty: ignore[deprecated]
searchreadSearch things
shirt-colourreadreturn
shirt_colourreadreturn
show_rootsreadreturn roots.model_dump_json()
simple_ratingreadRequest a simple boolean rating.
start_t4_small_sandboxwriteSimulate starting a t4-small sandbox without infrastructure or charges.
string_lowerreadreturn text.lower()
string_upperreadreturn text.upper()
test_sampling_with_toolsreadSample with a tool declaration through the modern resolver API.
test_sampling_without_toolsreadSample without tools through the modern resolver API.
test_tool_result_handlingreadComplete a second sampling turn when the model requests a tool.
text_countreadreturn f
text_reversereadreturn text[::-1]
text_uppercasereadreturn text.upper()
update_dynamic_appwriteglobal resource_version
url_required_malformed_toolreadReturn URL elicitation required error with malformed data payload.
url_required_valid_toolreadReturn URL elicitation required error with well-formed data.
user_profilereadRequest a complex user profile form.
utility_pingreadreturn
utility_statusreadreturn
weatherreadcall this to check the weather in a city
write_text_filewriteWrite a text file
zetareadlast alphabetically

Details

Source
evalstate/fast-agent
PyPI
fast-agent-mcp
Transports
sse · stdio · streamable-http
Credentials it reads
ANTHROPIC_API_KEYCODEX_API_KEYCODEX_AUTH_JSON_PATHDEEPSEEK_API_KEYDEMO_TOKENFAST_AGENT_HF_TOKEN_SOURCEFAST_AGENT_OAUTH_CLIENT_METADATA_URLFAST_AGENT_OAUTH_RESOURCE_URLFAST_AGENT_OAUTH_SCOPESFAST_AGENT_PRIVACY_FILTER_MAX_WINDOW_TOKENSFAST_AGENT_PRIVACY_FILTER_WINDOW_OVERLAP_TOKENSFAST_AGENT_RESEARCH_HF_TOKEN
License
Apache-2.0
Stars
3,918 · pushed 0d ago

Trust audit

Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (5 observation(s))
Network
declared (6 observation(s))
Shell
declared (3 observation(s))
Dependencies
pinned
Secrets in source
found

Findings (25)

MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/fast_agent/cli/main.py:107
module = importlib.import_module(module_path)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/fast_agent/tools/environment_factory.py:195
module = importlib.import_module(module_name.strip())
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
src/fast_agent/mcp/oauth_client.py:1097
def _extract_oauth_callback_params(callback_url: str) -> AuthorizationCodeResult:
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
src/fast_agent/mcp/oauth_client.py:1098
params = parse_qs(urlparse(callback_url).query)
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
src/fast_agent/mcp/oauth_client.py:1123
callback_url = (
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
src/fast_agent/mcp/oauth_client.py:1141
result = _extract_oauth_callback_params(callback_url)
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
auth-expired0608.json:5
"id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImFlNjc5NWRjLTRiYWUtNDE4YS04NjVkLTA4YTY0MzllZWRhNiIsInR5cCI6IkpXVCJ9.eyJhbXIiOlsib3RwIiwidXJuOm9wZW5haTphbXI6b3RwX2VtYWlsIl0sImF1ZCI6WyJhcHBfRU1vYW1FRVo3M2YwQ2
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
docs/docs/agents/defining/python_api.md:151
api_key="programmatic-api-key",        # specify the API KEY programmatically, it will override which provided in config file or env var
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
docs/docs/agents/defining/python_api.md:173
api_key="programmatic-api-key",        # specify the API KEY programmatically, it will override which provided in config file or env var
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
docs/docs/agents/workflows.md:266
api_key="programmatic-api-key",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
docs/docs/agents/workflows.md:282
api_key="programmatic-api-key",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
docs/docs/agents/workflows.md:294
api_key="programmatic-api-key",
LOWInventory / provenance · inv.hidden_file · CWE-1104
.gitmodules
.gitmodules
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.pre-commit-config.yaml
.pre-commit-config.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
docs/.prettierignore
.prettierignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
examples/tensorzero/.env.sample
.env.sample
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/fast_agent/cli/commands/url_parser.py:119
url_hash = hashlib.md5(url.encode()).hexdigest()[:8]
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/social_cards/benchmark/storyboard.js:269
"../../docs/assets/brand/fast-agent-lockup-light.svg"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/social_cards/benchmark/storyboard.js:417
"../../docs/assets/brand/fast-agent-lockup-light.svg"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/social_cards/benchmark/storyboard.js:475
"../../docs/assets/brand/fast-agent-lockup-light.svg"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/a2a_docs_pipeline.py:241
'data-fa-asciinema-cast="../../assets/a2a/a2a-client-input-required.cast"',
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/a2a_docs_pipeline.py:245
'data-fa-asciinema-cast="../../assets/a2a/a2a-server-card.cast"',
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
tests/unit/fast_agent/mcp/test_cimd.py:364
callback_url = (
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:697
# Run the dev server (http://127.0.0.1:8000)
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/docs/a2a/api.md:33
url="http://127.0.0.1:41242",

Gates applied: no_behavioural_pass.

Audited 2026-09-14 · audit v0.4.0 · source sha 5a70690438f9 · full audit: observations/trust-audit/mcp-server/evalstate__fast-agent.json · Report an issue or request a re-scan

Audit history

DateSourceVerdictGradeScoreChange
2026-09-145a70690438f9CAUTIONF49first audit

Alternatives

Other servers in the same categories, safer ones first.

Questions

What is the Fast Agent MCP server?

Code, Build and Evaluate agents - excellent Model and Skills/MCP/ACP/A2A Support

What tools does Fast Agent expose?

85 in total: 75 read-only, 10 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is Fast Agent safe to connect to an agent?

With care. The audit graded it F (49/100) and found 25 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does Fast Agent need?

It reads ANTHROPIC_API_KEY, CODEX_API_KEY, CODEX_AUTH_JSON_PATH, DEEPSEEK_API_KEY, DEMO_TOKEN, FAST_AGENT_HF_TOKEN_SOURCE, FAST_AGENT_OAUTH_CLIENT_METADATA_URL, FAST_AGENT_OAUTH_RESOURCE_URL, FAST_AGENT_OAUTH_SCOPES, FAST_AGENT_PRIVACY_FILTER_MAX_WINDOW_TOKENS, FAST_AGENT_PRIVACY_FILTER_WINDOW_OVERLAP_TOKENS and FAST_AGENT_RESEARCH_HF_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does Fast Agent run?

It speaks sse, stdio and streamable-http, so it runs as a local process your client starts. It is published on PyPI as fast-agent-mcp.

How current is this page?

The grade is for one exact copy of the source (5a70690438f9), read on 2026-09-14. The repository is watched and re-audited when it changes.

Provenance: OBSERVED · read 2026-09-14 · job trust-audit-2026-09-14