← MCP servers · lastmile-ai

MCP Agent

BLOCKgrade F · trust 52/100

Build effective agents using Model Context Protocol and simple workflow patterns

agentsaiai agentsllmllmsmcpmodel context protocolpython

Overview

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

<p align="center">  <a href="https://docs.mcp-agent.com"><img src="https://github.com/user-attachments/assets/c8d059e5-bd56-4ea2-a72d-807fb4897bde" alt="Logo" width="300" /></a></p><p align="center">  <em>Build effective agents with Model Context Protocol using simple, composable patterns.</em><p align="center">  <a href="https://github.com/lastmile-ai/mcp-agent/tree/main/examples" target="_blank"><strong>Examples</strong></a>  |  <a href="https://docs.mcp-agent.com/mcp-agent-sdk/effective-patterns/overview" target="_blank"><strong>Building Effective Agents</strong></a>  |  <a href="https://modelcontextprotocol.io/introduction" target="_blank"><strong>MCP</strong></a></p><p align="center"><a href="https://docs.mcp-agent.com"><img src="https://img.shields.io/badge/docs-8F?style=flat&link=https%3A%2F%2Fdocs.mcp-agent.com%2F" /><a/><a href="https://pypi.org/project/mcp-agent/"><img src="https://img.shields.io/pypi/v/mcp-agent?color=%2334D058&label=pypi" /></a><img alt="Pepy Total Downloads" src="https://img.shields.io/pepy/dt/mcp-agent?label=pypi%20%7C%20downloads"/><a href="https://github.com/lastmile-ai/mcp-agent/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-Apache_2.0-blue.svg"/></a><a href="https://lmai.link/discord/mcp-agent"><img src="https://img.shields.io/badge/Discord-%235865F2.svg?logo=discord&logoColor=white" alt="discord"/></a></p><p align="center"><a href="https://trendshift.io/repositories/13216" target="_blank"><img src="https://trendshift.io/api/badge/repositories/13216" alt="lastmile-ai%2Fmcp-agent | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a></p>## Overview**`mcp-agent`** is a simple, composable framework to build effective agents using [Model Context Protocol](https://modelcontextprotocol.io/introduction).> [!Note]> mcp-agent's vision is that _MCP is all you need to build agents, and that simple patterns are more robust than complex architectures for shipping high-quality agents_.`mcp-agent` gives

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 coinflip --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} --env AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} --env AZURE_API_KEY=${AZURE_API_KEY} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "coinflip": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
        "AWS_ACCESS_KEY_ID": "${AWS_ACCESS_KEY_ID}",
        "AWS_SECRET_ACCESS_KEY": "${AWS_SECRET_ACCESS_KEY}",
        "AZURE_API_KEY": "${AZURE_API_KEY}"
      }
    }
  }
}

Exposed tools (51) 45 read · 6 write · 0 destructive

ToolRiskDescription
agent_functionreadAgent function
alphareadreturn f
betareadreturn f
book_tablereadBook a table with confirmation
confirm_actionreadAsk the user to confirm an action via elicitation.
custom_icon_toolreadreturn text
echoreadreturn text +
elicitation_demoread
emit_logreadLog a message at the requested level and emit a notification.
example_usageread
finder_agentread
finder_toolread
get-magic-numberreadReturns the magic number
get_comparable_propertiesread
get_haikureadUse MCP sampling to generate a haiku about the given topic.
get_market_statisticsread
get_property_detailsread
get_rental_trendsread
get_script_word_countreadReturn the number of whitespace-separated tokens in *script*.
github_org_searchreadSearch GitHub organizations using the remote MCP server.
hello_worldreadA simple tool that returns
my_toolreadDescription for my_tool
no_icon_toolreadreturn text
notifywriteSend an upstream log/notification at the requested level.
notify_progresswriteTrigger a progress notification.
notify_resourceswriteTrigger a non-logging resource list changed notification.
parent_toolreadA parent tool
runwritebound_ctx, token = _enter_request_context(ctx)
sample_haikureadGenerate a short poem using configured LLM settings.
search_propertiesread
show_rootsreadreturn await ctx.session.list_roots()
test_toolreadA test tool
toolreadDescription for tool
tool1readDescription for tool1
tool2readDescription for tool2
tool3readDescription for tool3
tool4readDescription for tool4
toolAreaddesc
toolBreaddesc
tool_exactreadDescription for tool_exact
tool_extrareadDescription for tool_extra
tool_filteredreadDescription for tool_filtered
tool_similarreadDescription for tool_similar
transfer_to_agentwriteTransfer control to the agent
workflows-cancelread
workflows-get_statusread
workflows-listread
workflows-resumeread
workflows-runwrite
workflows-runs-listread
workflows-store-credentialsread

Details

Source
lastmile-ai/mcp-agent
npm
coinflip@0.1.0
PyPI
mcp-agent
Transports
sse · stdio · streamable-http
Credentials it reads
ANTHROPIC_API_KEYAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAZURE_API_KEYGITHUB_ACCESS_TOKENGITHUB_CLIENT_SECRETGOOGLE_API_KEYLOG_SECRETSMCP_GATEWAY_TOKENMY_SECRETNEXTAUTH_SECRETOAUTH_REDIS_URL
License
Apache-2.0
Stars
8,538 · pushed 230d ago

Trust audit

Do not install this without reading the findings. The audit found something that could harm you or your machine.

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

What the source does

Filesystem
declared (3 observation(s))
Network
none-observed
Shell
declared (7 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
src/mcp_agent/cli/secrets/yaml_tags.py:107
return yaml.load(yaml_str, Loader=SecretYamlLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/mcp_agent/utils/pydantic_type_serializer.py:758
exec(func_code, namespace)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/mcp_agent/cli/cloud/commands/deploy/materialize.py:317
module = importlib.import_module(module_name)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/mcp_agent/cli/commands/build.py:133
module = __import__(package)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/mcp_agent/executor/temporal/__init__.py:558
importlib.import_module(module_name)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/mcp_agent/utils/pydantic_type_serializer.py:514
module = importlib.import_module(serialized["module"])
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/mcp_agent/utils/pydantic_type_serializer.py:528
module = importlib.import_module(serialized["module"])
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
examples/usecases/mcp_instagram_gift_advisor/mcp_agent.secrets.yaml.example:10
api_key: "sk-ant-api03-your-anthropic-api-key-here"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
docs/concepts/augmented-llms.mdx:56
api_key: "your-anthropic-api-key"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
docs/mcp-agent-sdk/core-components/augmented-llm.mdx:57
api_key: "your-anthropic-api-key"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
examples/basic/mcp_basic_agent/main.py:37
api_key="sk-my-openai-api-key",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
examples/basic/mcp_basic_agent/main.py:41
api_key="sk-my-anthropic-api-key",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
examples/basic/mcp_basic_agent/mcp_agent.secrets.yaml.example:10
api_key: "sk-your-anthropic-key"
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
examples/usecases/mcp_basic_slack_agent/README.md:88
SLACK_BOT_TOKEN: "xoxb-your-bot-token"
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
examples/usecases/mcp_basic_slack_agent/mcp_agent.config.yaml:10
#   SLACK_BOT_TOKEN: "xoxb-your-bot-token"
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
examples/usecases/mcp_basic_slack_agent/mcp_agent.secrets.yaml.example:13
SLACK_BOT_TOKEN: "xoxb-your-bot-token"
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
examples/usecases/mcp_github_to_slack_agent/mcp_agent.secrets.yaml.example:10
SLACK_MCP_XOXP_TOKEN: "xoxp-oauth-token"
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
.prettierignore
.prettierignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
tests/cli/secrets/test_yaml_tags.py:127
loaded = yaml.load(processed_yaml, Loader=SecretYamlLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
src/mcp_agent/cli/utils/url_parser.py:55
url_hash = hashlib.md5(url.encode()).hexdigest()[:8]
LOWInformation disclosure · disclose.log_secret · CWE-209, CWE-532
tests/cli/fixtures/api_test_utils.py:148
print(f"Generated test API key: {api_key[:15]}...{api_key[-5:]}")
LOWInformation disclosure · disclose.log_secret · CWE-209, CWE-532
tests/cli/fixtures/api_test_utils.py:274
print(f"API Key: {'*' * 6 + api_key[-4:] if api_key else 'Not set'}")
LOWInformation disclosure · disclose.log_secret · CWE-209, CWE-532
tests/cli/utils/jwt_generator.py:195
print(token)
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
examples/basic/agent_factory/mcp_agent.config.yaml:1
$schema: ../../../schema/mcp-agent.config.schema.json

Gates applied: no_behavioural_pass.

Audited 2026-09-13 · audit v0.4.0 · source sha 86e936c23c81 · full audit: observations/trust-audit/mcp-server/lastmile-ai__mcp-agent.json · Report an issue or request a re-scan

Audit history

DateSourceVerdictGradeScoreChange
2026-09-1386e936c23c81BLOCKF52first audit

Alternatives

Other servers in the same categories, safer ones first.

Questions

What is the MCP Agent MCP server?

Build effective agents using Model Context Protocol and simple workflow patterns

What tools does MCP Agent expose?

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

Is MCP Agent safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (52/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does MCP Agent need?

It reads ANTHROPIC_API_KEY, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AZURE_API_KEY, GITHUB_ACCESS_TOKEN, GITHUB_CLIENT_SECRET, GOOGLE_API_KEY, LOG_SECRETS, MCP_GATEWAY_TOKEN, MY_SECRET, NEXTAUTH_SECRET and OAUTH_REDIS_URL 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 MCP Agent run?

It speaks sse, stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as coinflip at 0.1.0.

How current is this page?

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

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