MCP, MCP server
Langgraph Ai
A comprehensive collection of LangGraph implementations, tutorials, and advanced AI workflows covering Agentic RAG systems, MCP (Model Context Protocol) development, and practical AI application patterns.
Compatibility: Not stated.
Grade C
One Medium finding. Read the report before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
OBFUSCATION_ENCODED_BLOB
Why this grade
- OBFUSCATION_ENCODED_BLOB Medium
Contains a long base64 shaped string in a file that should be readable.
langgraph-cookbook/tool-calling -vs-react.ipynb, line 1
{
Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.
Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.
What was checked
Plain notes from the hygiene checks.
Permissions
Note
requests shell access. The manifest names this permission.
PERMISSION_SHELL_DECLARED
mcp/01-build-your-own-server-client/servers/terminal_server/terminal_server.py, line 28
process = subprocess.run(
mcp/02-build-mcp-client-with-multiple-server-support/servers/terminal_server/terminal_server.py, line 45
process = subprocess.run(
mcp/03-build-mcp-server-client-using-sse/servers/sse_server/terminal_server_sse.py, line 99
# subprocess.run() executes the command in a controlled manner
Show more
mcp/03-build-mcp-server-client-using-sse/servers/sse_server/terminal_server_sse.py, line 100
result = subprocess.run(
mcp/04-build-streammable-http-mcp-client/servers/http/server_launcher.py, line 20
self.processes: List[subprocess.Popen] = []
mcp/04-build-streammable-http-mcp-client/servers/http/server_launcher.py, line 36
process = subprocess.Popen(
mcp/04-build-streammable-http-mcp-client/servers/stdio/terminal_server.py, line 69
result = subprocess.run(
rag/agentic-rag/agentic-rag-systems/mcp_a2a_agentic_rag/main.py, line 116
result = subprocess.run(['netstat', '-an'], capture_output=True, text=True, timeout=5)
Install and update
Note
README documents an installer that pipes a download into a shell.
INSTALL_DOCUMENTED_INSTALLER
README.md, line 74
curl -LsSf https://astral.sh/uv/install.sh | sh
langgraph-cookbook/agentic-patterns/README.md, line 107
curl -LsSf https://astral.sh/uv/install.sh | sh
mcp/02-build-mcp-client-with-multiple-server-support/README.md, line 35
curl -LsSf https://astral.sh/uv/install.sh | sh
Show more
mcp/03-build-mcp-server-client-using-sse/README.md, line 36
curl -LsSf https://astral.sh/uv/install.sh | sh
multi-agent-system/multi-agent-swarm/README.md, line 75
curl -LsSf https://astral.sh/uv/install.sh | sh
rag/agentic-rag/agentic-rag-systems/building-adaptive-rag/README.md, line 61
curl -LsSf https://astral.sh/uv/install.sh | sh
Network
Concern
can reach a host that is not written as a fixed address. can reach serpapi.com. The description does not name that host.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
mcp/04-build-streammable-http-mcp-client/servers/http/server_launcher.py, line 62
response = requests.get(url, timeout=1)
rag/agentic-rag/agentic-rag-systems/mcp_a2a_agentic_rag/agents/agentic_rag_agent/rag_orchestrator.py, line 332
resp = requests.post(self.endpoint, json=search_request)
multi-agent-system/multi-agent-swarm/Multi-Agent-Swarm.ipynb, line 172
" response = requests.get(url)\n",
Show more
rag/agentic-rag/agentic-rag-systems/mcp_a2a_agentic_rag/medium.md, line 460
response = requests.get("https://serpapi.com/search", params=params)
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
langextract/doc-entity-extractor/src/entity_extractor.py, line 42
api_key=os.getenv("GOOGLE_API_KEY"),
langextract/doc-entity-extractor/src/utils.py, line 6
# Load environment variables from .env file
langextract/doc-entity-extractor/src/utils.py, line 10
"""Load Gemini API key from .env file or user input"""
Show more
langextract/doc-entity-extractor/src/utils.py, line 14
# Try to load from .env file
langextract/doc-entity-extractor/src/utils.py, line 15
key = os.getenv("GOOGLE_API_KEY")
langextract/doc-entity-extractor/src/utils.py, line 17
st.sidebar.success("✅ Using API key from .env file")
langextract/doc-entity-extractor/src/utils.py, line 24
help="Get your API key from Google AI Studio or add it to .env file"
langextract/knowledge-graphs-with-langextract/src/extractors.py, line 39
api_key=os.getenv("GOOGLE_API_KEY")
langextract/knowledge-graphs-with-langextract/src/utils.py, line 6
# Load environment variables from .env file
langextract/knowledge-graphs-with-langextract/src/utils.py, line 10
"""Load Gemini API key from .env file or user input"""
langextract/knowledge-graphs-with-langextract/src/utils.py, line 14
# Try to load from .env file
langextract/knowledge-graphs-with-langextract/src/utils.py, line 15
key = os.getenv("GOOGLE_API_KEY")
mcp/01-build-your-own-server-client/clients/mcp-client/client.py, line 31
api_key = os.getenv("GEMINI_API_KEY")
mcp/01-build-your-own-server-client/clients/mcp-client/langchain_mcp_client.py, line 43
google_api_key=os.getenv("GOOGLE_API_KEY")
mcp/02-build-mcp-client-with-multiple-server-support/clients/mcp-client/mcp_client.py, line 95
google_api_key=os.getenv("GOOGLE_API_KEY") # Secure API key retrieval from environment
mcp/03-build-mcp-server-client-using-sse/clients/mcp-client/client_sse.py, line 84
gemini_api_key = os.getenv("GEMINI_API_KEY")
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Concern
contains an encoded blob in a file that should be readable.
OBFUSCATION_ENCODED_BLOB
langgraph-cookbook/tool-calling -vs-react.ipynb, line 1
{
langgraph-cookbook/agentic-patterns/reflection/reflection.ipynb, line 1
{
rag/agentic-rag/agentic-workflow-pattern/1-prompting_chaining.ipynb, line 1
{
Show more
rag/agentic-rag/agentic-workflow-pattern/2-routing.ipynb, line 1
{
rag/agentic-rag/agentic-workflow-pattern/4-orchestrator-worker.ipynb, line 1
{
rag/agentic-rag/agentic-workflow-pattern/5-Evaluator-optimizer.ipynb, line 1
{
rag/rag-from-scratch/1_rag_overview.ipynb, line 1
{
langgraph-cookbook/agentic-patterns/reflection/reflection.ipynb, line 6
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9AAAAUqCAIAAAA2zHh4AAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQfoBxoRBCoZdJ0xAACAAElEQVR42u
langgraph-cookbook/agentic-patterns/reflection/reflection.ipynb, line 484
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAdEAAAFbCAYAAACK6LQlAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdeXxU9aH+8U8yM9lXspMAISxJICBhl0VQQMUFcCsiuFy3Wv21t/ZqrVVrq7W3XtQutmqttbVqC1pUcAEXUI
langgraph-cookbook/agentic-patterns/reflexion/reflexion.ipynb, line 579
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAUYAAAJ7CAYAAACf2zgeAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdeXwU9f3H8ddmd3PvZnOTEJJAIBAIECBiuRQLgniLoKKAZ1uPn1errVbt3dq7tbbeR21trShgUSuXggh4cU
langgraph-cookbook/human-in-the-loop/01-human-in-the-loop.ipynb, line 122
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAIsAAADqCAIAAAAd0yFXAAAAAXNSR0IArs4c6QAAF7FJREFUeJztnXlAE1f+wN9kch8c4b4PKSiKAgYtq7YcAipordKVelTbitqyrrq1v61212rdbm2Law+tB2tru54/q7XeJ7rVbosGRU
langgraph-cookbook/human-in-the-loop/01-human-in-the-loop.ipynb, line 339
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAKgAAAF3CAIAAAC+NpetAAAAAXNSR0IArs4c6QAAIABJREFUeJztnWdcFEcfgOd64wq9Se+IIgKRWLBgQSyAWNHEqGg00WgSU4yxJ7HFhsaa2MWKMbHExGii2FFAeq8ivVzvd++HNSevOQ
langgraph-cookbook/human-in-the-loop/01-human-in-the-loop.ipynb, line 507
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAKgAAAF3CAIAAAC+NpetAAAAAXNSR0IArs4c6QAAIABJREFUeJztnXdcFMffgOd64wodpHcpiihEYhQjWLESOxYs2BITfRNNNMaeRGNJbFGjsaLYjYk9RqNiRwUB6R2RdpTr/e79Y/2dxB
langgraph-cookbook/human-in-the-loop/02-human-in-the-loop.ipynb, line 213
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAUoAAAGwCAIAAABAQrstAAAAAXNSR0IArs4c6QAAIABJREFUeJzt3XdcE/f/B/BP9gIS9p4qKjIVR12AgHvhHkiw2mrVWivWUbVaR7XW0aq1Vq0S3HvWLU5cOFBRlCIgWzYZZCe/P85vyk
langgraph-cookbook/human-in-the-loop/02-human-in-the-loop.ipynb, line 602
"image/png": "iVBORw0KGgoAAAANSUhEUgAAALkAAAGwCAIAAAB6t1N3AAAAAXNSR0IArs4c6QAAIABJREFUeJzt3XdAE+f/B/Ani4QwwggblCUgQzYoVUABR0GUiqOKe+GeddvWUVtH22/V2hZHLVrrQnHUUUcdgFuZ4gQUIaDsJJCd3x
Licence
Pass
A licence file is present (license).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit 7ed556f75776. requests shell access. The manifest names this permission. README documents an installer that pipes a download into a shell. can reach a host that is not written as a fixed address. can reach serpapi.com. The description does not name that host. reads a credential or environment file. contains an encoded blob in a file that should be readable.
Date and source
Date checked:
github.com
Commit graded: 7ed556f75776eb905c1b1dcb0c45c0cb56b53690
This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.