Model Context Protocol AI Agents Hands-on Guide
“MCP server” and “AI agent” are often mentioned together, which makes them sound like competing technologies. They are not. An AI agent is the decision-maker : it interprets a goal, reasons about the next step, selects tools and evaluates results. An MCP server is a standardized capability provider : it exposes tools, resources and reusable prompts to compatible AI applications.
What Is the Model Context Protocol?
The Model Context Protocol (MCP) is an open standard that allows AI applications to connect to external systems through a consistent client-server interface. Instead of building a different custom integration for every model and every business system, a developer can expose capabilities through an MCP server and connect them to compatible MCP hosts.
An MCP server can expose three important primitives:
Tools
Actions the model may invoke, such as checking service health, reading recent logs, querying an API, validating a deployment or restarting an approved non-production service.
Resources
Contextual data that can be read, such as runbooks, architecture documents, deployment history, schemas, logs or monitoring definitions.
Prompts
Reusable, structured prompt templates for workflows such as investigating an incident, reviewing a release or preparing a root-cause summary.
Official MCP documentation describes servers as focused providers of tools, resources and prompts, while clients manage connections, capability negotiation and protocol communication.
What Is an AI Agent?
An AI agent is software built around a language model and given instructions, tools and an execution loop. Depending on its design, it may:
- understand a user goal;
- create a plan;
- select and invoke tools;
- inspect tool results;
- retry or choose another approach;
- delegate to another specialized agent;
- stop when the goal is completed or approval is required.
Modern agent frameworks also commonly support handoffs, memory or state, tracing and input/output guardrails.
MCP Server vs AI Agent: The Core Difference
| Area | MCP Server | AI Agent |
| Primary purpose | Expose external capabilities in a standard format | Achieve a goal by reasoning and acting |
| Decision-making | Usually deterministic service logic | Uses model reasoning to choose the next action |
| Requires an LLM | No | Usually yes |
| Provides | Tools, resources and prompts | Instructions, planning, orchestration and evaluation |
| Typical deployment | Local process or remote service | Application, worker, API service or automation runtime |
| Example | Operations MCP server exposing health-check and log-query tools | Incident-response agent that investigates an outage and recommends the next action |
| Main security concern | Excessive permissions, exposed data, weak authentication | Incorrect decisions, prompt injection, unsafe autonomous actions |
How MCP and an Agent Work Together
The workflow is typically:
- The user reports that checkout requests are failing.
- The agent decides to inspect service health and recent errors.
- The MCP client discovers the tools exposed by the operations server.
- The agent calls check_service_health and get_recent_errors .
- The MCP server validates the requests and queries approved monitoring systems.
- The results return to the agent in structured form.
- The agent correlates the evidence, proposes a likely cause and asks for approval before any high-impact remediation.
Practical Example: Build a Simple Operations MCP Server
This example uses Node.js, TypeScript and the official MCP TypeScript SDK . It exposes:
- a tool named check_service_health ;
- a tool named get_recent_errors ;
- a resource named ops://incident-runbook ;
- stdio transport for local development.
Prerequisites
- Node.js 20 or newer recommended
- npm
- Visual Studio Code or another editor
- An MCP-compatible host or MCP Inspector for testing
mkdir operations-mcp-demo cd operations-mcp-demo npm init -y npm install @modelcontextprotocol/sdk zod npm install -D typescript tsx @types/node mkdir src{ "name": "operations-mcp-demo", "type": "module", "scripts": { "start": "tsx src/index.ts", "build": "tsc" }, "dependencies": { "@modelcontextprotocol/sdk": "latest", "zod": "latest" }, "devDependencies": { "@types/node": "latest", "tsx": "latest", "typescript": "latest" } }import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; const server = new McpServer({ name: "operations-server", version: "1.0.0" }); const allowedServices = ["checkout-api", "catalog-api", "payment-worker"] as const; server.registerTool( "check_service_health", { title: "Check service health", description: "Returns the current health of an approved service", inputSchema: { service: z.enum(allowedServices) } }, async ({ service }) => { // Replace this demo response with a call to your monitoring API. const result = { service, status: service === "checkout-api" ? "degraded" : "healthy", latencyMs: service === "checkout-api" ? 1820 : 120, checkedAt: new Date().toISOString() }; return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; } ); server.registerTool( "get_recent_errors", { title: "Get recent errors", description: "Returns sanitized recent errors for an approved service", inputSchema: { service: z.enum(allowedServices), minutes: z.number().int().min(1).max(60).default(15) } }, async ({ service, minutes }) => ({ content: [{ type: "text", text: JSON.stringify({ service, windowMinutes: minutes, errors: service === "checkout-api" ? [{ code: "DB_POOL_TIMEOUT", count: 47 }] : [] }, null, 2) }] }) ); server.registerResource( "incident-runbook", "ops://incident-runbook", { title: "Incident Response Runbook", description: "Approved investigation and escalation procedure", mimeType: "text/markdown" }, async uri => ({ contents: [{ uri: uri.href, text: "Check health, review sanitized errors, correlate deployments, then request approval before remediation." }] }) ); const transport = new StdioServerTransport(); await server.connect(transport);npm startWith stdio transport, a silent terminal is normal because protocol messages use standard input/output. Write diagnostic logs to stderr rather than stdout to avoid corrupting protocol traffic.
npx @modelcontextprotocol/inspector npx tsx src/index.tsOpen the Inspector URL shown in the terminal, connect, list the tools and invoke check_service_health with checkout-api .
Illustrated Configuration Screenshot
The following configuration shows how a local MCP host can start the server as a child process. The exact configuration file and UI vary between hosts.
{ "mcpServers": { "operations": { "command": "npx", "args": [ "tsx", "/absolute/path/operations-mcp-demo/src/index.ts" ], "env": { "MONITORING_API_URL": "https://monitoring.example.com", "ENVIRONMENT": "staging" } } } }Turn the Demo into a Production Operations MCP Server
A production operations MCP tool should accept a strict schema, restrict service names, sanitize logs and separate read-only diagnostics from high-impact remediation.
server.registerTool( "restart_staging_service", { description: "Restarts an approved staging service after authorization", inputSchema: { service: z.enum(["checkout-api", "catalog-api"]), approvalId: z.string().min(10) } }, async ({ service, approvalId }) => { // 1. Verify the caller and approval record // 2. Confirm environment is staging, never production // 3. Call the deployment platform with a least-privilege credential // 4. Record the action in an audit log return { content: [{ type: "text", text: JSON.stringify({ service, status: "restart_requested", approvalId }) }] }; } );How to Build the AI Agent
The agent is a separate application layer. It can connect to the MCP server, inspect available tools and decide when to call them.
An incident-response agent could follow these instructions:
A typical agent loop is:
while incident_not_resolved: understand_current_state() choose_next_diagnostic_action() call_read_only_tool_when_required() inspect_and_correlate_results() apply_guardrails() request_human_approval_for_remediation()End-to-End Incident Example
1. Report
The user says checkout requests are returning HTTP 500 errors.
2. Diagnose
The agent checks health, latency and recent sanitized errors through MCP tools.
3. Correlate
It identifies repeated database-pool timeouts and checks whether a deployment occurred recently.
4. Recommend
It recommends increasing the pool limit or rolling back the latest change, with evidence and confidence.
5. Approve
A human reviews the recommendation and authorizes the selected remediation.
6. Verify
The agent rechecks health and errors, then prepares an incident summary.
Local MCP Server vs Remote MCP Server
| Factor | Local / stdio | Remote / HTTP |
| Best for | Developer tools, local files, desktop integrations | Teams, SaaS integrations, centralized enterprise services |
| Deployment | Runs on the user’s machine | Runs on a managed server or cloud platform |
| Authentication | Often inherited local access | Requires robust authentication and authorization |
| Scaling | Per-user process | Can support many clients when designed correctly |
| Exposure | Smaller network attack surface | Public/private network exposure must be secured |
Pros and Cons of MCP Servers
Advantages
- Standardized integration surface
- Reusable across compatible AI hosts
- Clear tool schemas improve discoverability
- Separates AI reasoning from system access
- Supports local and remote deployment models
- Can centralize authentication, policy and auditing
Limitations
- Still requires secure backend implementation
- Host and SDK behavior can evolve
- Tool descriptions consume model context
- Overly broad tools increase risk
- Remote servers require production-grade operations
- MCP does not automatically make an integration safe
Pros and Cons of AI Agents
Advantages
- Handles multi-step goals
- Chooses tools dynamically
- Adapts to intermediate results
- Can delegate to specialized agents
- Automates repetitive knowledge work
- Provides natural-language interaction
Limitations
- Outputs and decisions are probabilistic
- Can select the wrong tool
- Prompt injection can influence behavior
- Long workflows increase cost and latency
- Requires tracing, testing and approval controls
- Autonomy must match the impact of the action
Security Checklist for Production
- Least privilege: Give each MCP tool only the permissions it needs.
- Separate read and write tools: Keep diagnostics separate from restart, deploy and delete actions.
- Human approval: Require confirmation for production changes, payments, infrastructure changes and account actions.
- Validate every argument: Use strict schemas, length limits and allowlists.
- Sanitize logs: Remove credentials, tokens and private customer data before returning results.
- Protect secrets: Use environment variables or a managed secrets service.
- Authenticate remote clients: Validate identity and authorization on every request.
- Audit actions: Record caller, tool, sanitized input, result, time and approval state.
- Defend against prompt injection: Treat external content as untrusted data, not instructions.
- Rate-limit and time out: Prevent runaway loops and expensive repeated calls.
Common Setup Problems
| Problem | Likely cause | Fix |
| Server starts but the host shows no tools | Wrong command/path, server not connected or incompatible SDK usage | Use absolute paths, verify the start command and test through Inspector |
| JSON/protocol errors | Application logs written to stdout | Send logs to stderr and reserve stdout for stdio protocol messages |
| Works in terminal but not in host | Different PATH or environment variables | Use absolute executable paths and explicitly provide required environment variables |
| Monitoring API returns permission denied | Credential scope, role or authentication error | Test the underlying API separately and use the minimum required role |
| Agent repeatedly calls a tool | Weak stopping criteria or ambiguous result | Return structured success/error states and set maximum turns or tool-call limits |
When Should You Build Only an MCP Server?
Build only an MCP server when you already have an MCP-compatible AI host and mainly need to expose your product’s capabilities. Examples include:
- monitoring and service-health tools;
- an internal documentation search service;
- database read-only analytics;
- GitHub repository tools;
- cloud inventory and status checks.
When Should You Build an Agent?
Build an agent when the workflow requires reasoning across multiple steps, dynamic tool selection, evaluation and follow-up. Examples include:
- investigating monitoring alerts and proposing remediation;
- triaging support requests and escalating complex cases;
- reviewing code, running tests and preparing a pull request;
- planning a release across issue tracking, source control and deployment systems;
- researching information and preparing a structured report.
When Should You Build Both?
Build both when you own the workflow and the systems it needs to access. The best architecture is usually:
For an IT operations platform, separate MCP servers could expose monitoring, log search, cloud inventory and deployment capabilities. The agent would decide the diagnostic sequence, correlate evidence and prepare a recommendation. Read-only investigation could run automatically, while restart, rollback, scaling and production deployment actions would require explicit approval.
Frequently Asked Questions
No. An MCP server normally exposes capabilities. It does not need an LLM and does not have to reason or plan.
Yes. Agents can use ordinary function calls, REST APIs or framework-specific tools. MCP provides a standardized integration method.
Yes, but that is an implementation choice. The server remains an MCP capability provider even if one of its tools calls a model.
No. A focused MCP server can expose multiple related tools. Avoid turning one server into an unrestricted gateway to every system.
Usually not. Read-only diagnostics can often be automated, but production remediation should use strong authorization, approval, audit logging and rollback controls.
No. MCP is designed as an open standard and can be implemented by different hosts, clients and servers.
Conclusion
An MCP server and an AI agent solve different layers of the problem. The server gives AI applications a predictable, structured route to tools and data. The agent supplies reasoning, planning and orchestration. Used together—and protected with least privilege, validation, tracing and human approval—they form a practical architecture for enterprise AI automation.
Official References
- Model Context Protocol introduction
- MCP architecture overview
- MCP tools specification
- Official MCP TypeScript SDK
- Official MCP Python SDK
- OpenAI Agents SDK documentation
Join the discussion
0 CommentsAsk questions, add context, or share what worked.
More from Melochip Editorial
Learn what Playwright testing is, why modern QA teams use it, how testers can get started, and the major types...
7 min read · Sep 19, 2026
Learn how Kubernetes Deployments and ReplicaSets work with practical YAML, scaling, self-healing, rolling upda...
7 min read · Sep 17, 2026
Learn Kubernetes security best practices with RBAC, Secrets, ServiceAccounts, Pod securityContext, NetworkPoli...
6 min read · Sep 17, 2026Related articles
Learn what Playwright testing is, why modern QA teams use it, how testers can get started, and the major types...
7 min read · Sep 19, 2026
Learn Linux from the ground up with simple explanations of the kernel, distributions, filesystem, commands, pe...
4 min read · Updated Oct 1, 2026
Learn Kubernetes monitoring and logs with kubectl logs, events, metrics-server, top commands, Prometheus, Graf...
5 min read · Sep 17, 2026
Troubleshoot Kubernetes issues including Pending Pods, CrashLoopBackOff, ImagePullBackOff, service routing, in...
7 min read · Sep 17, 2026Stay in the loop. Get new Melochip articles
Receive Melochip article updates when new articles are available. Explicit opt-in only.
No comments yet. Start the discussion.