Build effective agents using Model Context Protocol and simple workflow patterns
Drift inferred · capture-to-capture
- HIGH code analysis flagged dynamic code execution ×4 in lastmile-ai/mcp-agent
transport stdio · streamable-http · http · sse counts 1 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
my_tool
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit f62d849 · analyzer v17 · 1h ago
skills & prompt files 3
danger signals4
- dynamic code executioneval()/exec()lastmile-ai-mcp-agent-f62d849/scripts/gen_schema.py:161
exec(content, namespace) - dynamic code execution__import__()lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/build.py:133
module = __import__(package) - dynamic code executionunsafe yaml.load()lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/secrets/yaml_tags.py:107
return yaml.load(yaml_str, Loader=SecretYamlLoader) - dynamic code executioneval()/exec()lastmile-ai-mcp-agent-f62d849/src/mcp_agent/utils/pydantic_type_serializer.py:758
exec(func_code, namespace)
evidence-backed
findings quoted directly from the published source artifact — not inferred
filesystem 50
- fs lastmile-ai-mcp-agent-f62d849/scripts/event_replay.py :10
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/scripts/event_summary.py :6
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/scripts/event_viewer.py :9
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/scripts/gen_llm_benchmarks.py :21
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/scripts/gen_schema.py :18
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/scripts/log_trimmer.py :14
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/scripts/promptify.py :7
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/auth/main.py :54
os.remove(tmp_path) - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/cloud/commands/configure/main.py :7
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/cloud/commands/deploy/bundle_utils.py :5
- Provide an adapter that works with `shutil.copytree(ignore=...)` to decide - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/cloud/commands/deploy/main.py :7
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/cloud/commands/deploy/materialize.py :10
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/cloud/commands/deploy/validation.py :3
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/cloud/commands/deploy/wrangler_wrapper.py :4
import shutil - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/cloud/commands/env/main.py :6
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/cloud/commands/logger/configure/main.py :3
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/cloud/commands/utils.py :4
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/cloud/main.py :7
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/build.py :9
import shutil - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/chat.py :9
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/check.py :9
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/config.py :7
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/configure.py :19
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/dev.py :11
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/doctor.py :10
import shutil - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/go.py :11
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/init.py :7
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/install.py :29
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/invoke.py :10
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/keys.py :10
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/logs.py :8
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/serve.py :11
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/server.py :320
from pathlib import Path as _Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/core/utils.py :5
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/main.py :13
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/secrets/processor.py :8
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/secrets/resolver.py :52
with open(config_path, "r", encoding="utf-8") as f: - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/utils/git_utils.py :15
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/utils/importers.py :8
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/utils/ux.py :4
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/config.py :9
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/data/templates/agent_factory.py :2
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/logging/json_serializer.py :6
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/logging/transport.py :14
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/oauth/flow.py :483
webbrowser.open(final_url, new=1, autoraise=True) - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/tracing/file_span_exporter.py :3
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/utils/resource_utils.py :2
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/workflows/deep_orchestrator/memory.py :9
from pathlib import Path - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/workflows/factory.py :865
with open(path, "r", encoding="utf-8") as f: - fs lastmile-ai-mcp-agent-f62d849/src/mcp_agent/workflows/llm/llm_selector.py :467
with open(override, "r", encoding="utf-8") as f:
shell / exec 8
- shell lastmile-ai-mcp-agent-f62d849/scripts/format.py :9
import subprocess - shell lastmile-ai-mcp-agent-f62d849/scripts/lint.py :9
import subprocess - shell lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/cloud/commands/deploy/wrangler_wrapper.py :5
import subprocess - shell lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/build.py :10
import subprocess - shell lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/config.py :292
import subprocess - shell lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/dev.py :9
import subprocess - shell lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/install.py :26
import subprocess - shell lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/utils/git_utils.py :12
import subprocess
network 26
- net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/cloud/commands/deploy/materialize.py :12
import httpx - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/cloud/commands/logger/configure/main.py :6
import httpx - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/cloud/commands/logger/tail/main.py :10
from urllib.parse import urlparse - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/build.py :13
import socket - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/config.py :653
import requests - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/doctor.py :11
import socket - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/go.py :43
import httpx # type: ignore - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/commands/keys.py :123
import httpx - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/core/api_client.py :6
import httpx - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/mcp_app/api_client.py :5
from urllib.parse import urlparse - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/secrets/api_client.py :30
httpx.HTTPError: If the API request fails - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/utils/url_parser.py :10
from urllib.parse import urlparse - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/utils/version_check.py :72
import httpx - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/cli/workflows/api_client.py :37
httpx.HTTPStatusError: If the API returns an error (e.g., 404, 403) - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/config.py :7
from httpx import URL - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/logging/json_serializer.py :11
import httpx - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/logging/transport.py :16
import aiohttp - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/mcp/client_proxy.py :4
import httpx - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/oauth/flow.py :7
import httpx - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/oauth/http/auth.py :1
"""httpx.Auth adapter that acquires tokens via TokenManager.""" - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/oauth/manager.py :11
import httpx - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/oauth/metadata.py :7
import httpx - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/oauth/store/redis.py :5
from urllib.parse import quote - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/server/app_server.py :10
import httpx - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/server/token_verifier.py :9
import httpx - net lastmile-ai-mcp-agent-f62d849/src/mcp_agent/telemetry/usage_tracking.py :16
# requests.post("https://telemetry.example.com/usage", json=data, timeout=2)
secrets 2
- secrets lastmile-ai-mcp-agent-f62d849/src/mcp_agent/mcp/client_proxy.py :53
tok = gateway_token or os.environ.get("MCP_GATEWAY_TOKEN") - secrets lastmile-ai-mcp-agent-f62d849/src/mcp_agent/server/app_server.py :974
gw_token = os.environ.get("MCP_GATEWAY_TOKEN")
database 1
- db lastmile-ai-mcp-agent-f62d849/src/mcp_agent/oauth/store/redis.py :21
import redis.asyncio as redis # type: ignore[import-not-found]
tool registrations 8
- finder_agent lastmile-ai-mcp-agent-f62d849/src/mcp_agent/data/templates/basic_agent.py :38
- workflows-list lastmile-ai-mcp-agent-f62d849/src/mcp_agent/server/app_server.py :1922
- workflows-runs-list lastmile-ai-mcp-agent-f62d849/src/mcp_agent/server/app_server.py :1964
- workflows-run lastmile-ai-mcp-agent-f62d849/src/mcp_agent/server/app_server.py :2020
- workflows-get_status lastmile-ai-mcp-agent-f62d849/src/mcp_agent/server/app_server.py :2048
- workflows-resume lastmile-ai-mcp-agent-f62d849/src/mcp_agent/server/app_server.py :2099
- workflows-cancel lastmile-ai-mcp-agent-f62d849/src/mcp_agent/server/app_server.py :2178
- workflows-store-credentials lastmile-ai-mcp-agent-f62d849/src/mcp_agent/server/app_server.py :2245
declared dependencies 22
- aiohttp@>=3.11.13
- fastapi@>=0.115.6
- httpx@>=0.28.1
- jsonref@>=1.1.0
- mcp@>=1.20.0
- numpy@>=2.1.3
- opentelemetry-distro@>=0.50b0
- opentelemetry-exporter-otlp-proto-http@>=1.29.0
- opentelemetry-instrumentation-anthropic@>=0.39.3
- opentelemetry-instrumentation-openai@>=0.39.3
- prompt-toolkit@>=3.0.50
- pydantic-settings@>=2.7.0
- pydantic-yaml@>=1.5.1
- pydantic@>=2.10.4
- pyyaml@>=6.0.2
- rich@>=13.9.4
- scikit-learn@>=1.6.0
- typer@>=0.15.3
- websockets@>=12.0
- pathspec@>=0.12.1
- python-dotenv@>=1.0.0
- watchdog@>=6.0.0