A collection of demo applications showcasing agentic AI workflows on Google Vertex AI, including an AI agent framework with LLM integration and a machine learning model serving with explainability
This repository is not an MCP server. It is a collection of Python scripts demonstrating agentic AI workflows (planning, execution, model inference, SHAP explanations) using local LLMs and Flask mock APIs. There is no MCP protocol implementation, no tool registration via MCP mechanisms, and no structured tool definitions that comply with MCP standards. The 'tools' listed are Python functions embedded in agent classes and standalone scripts, not MCP-registered tools. Descriptions are minimal (under 50 chars for most), schemas are inferred from function signatures rather than explicitly declared in JSON Schema format, and there is no error handling, security model, or composition support typical of production MCP servers. The codebase demonstrates basic agentic patterns (planning, execution, model prediction, SHAP explanation) but does not expose these as remotely callable, schema-validated MCP tools.
Sends a prompt to the local LLM and returns the output
Ask the LLM to break the goal into steps
Executes an action based on model prediction
Execute one step using the LLM
Generates SHAP explanations for model predictions
Fetches data from a mock API endpoint
Ask LLM if the goal is complete
Not an MCP server. No MCP protocol implementation detected. Functions are embedded Python methods, not MCP-registered tools with protocol handlers.
Tool descriptions are too short (10 - 40 chars) and lack context. LLMs cannot determine when or why to select these tools. Descriptions should be 50 - 200 characters and answer WHAT, WHEN, and WHAT RETURNS.
Input and output schemas are inferred from code signatures, not explicitly declared as JSON Schema. No 'type', 'properties', 'required', or 'items' fields visible in schema definitions. Tools cannot be reliably integrated by remote clients.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | F | 28 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 17 | - | v1 |
Loads a machine learning model from disk using joblib
Makes predictions using the loaded model
No error handling or recovery guidance. Functions raise exceptions (e.g. 'FileNotFoundError' in load_model) without actionable error messages or classification (retryable vs fatal). LLMs cannot self-correct.
Parameter descriptions are missing or trivial. E.g. 'api_url' has no description of expected format; 'model' param in model_predict is undescribed; 'features_dict' lacks specification of required keys (f1, f2, f3 only). LLMs cannot infer correct values.
No output schema documentation. Functions return raw Python objects (lists, dicts, model objects) without specification of structure or field types. LLMs cannot plan downstream tool chaining.
No permission checks or audit trails. Functions execute without authorization verification or logging of caller, parameters, or results. Sensitive operations (execute_action, delete models) are unprotected.
No input validation. Functions accept arbitrary values without type checking, range validation, or sanitization. E.g. timeout can be any integer (no bounds); features_dict accepts any object; api_url is unconstrained.
'is_finished' has an ambiguous name. Does it check completion status or mark as finished? Not clear from name alone. Better: 'check_goal_completion' or 'is_goal_complete'.
model_predict and explain_with_shap accept 'model' as a parameter (Python object). Models cannot be serialized for remote invocation. This breaks composability across process boundaries.