agent-as-mcp-server-MAF

chanirban/agent-as-mcp-server-MAF

3.4

If you are the rightful owner of agent-as-mcp-server-MAF and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.

This repository demonstrates how to expose an agent as an MCP server using the Microsoft Agent Framework (MAF) and connect to it via a test ping client and a ChatAgent orchestration client.

Tools
1
Resources
0
Prompts
0

Agent as MCP Server (Microsoft Agent Framework)

This repo demonstrates how to expose an agent as an MCP server using the Microsoft Agent Framework (MAF), and how to connect to it from:

  • a test ping client (mcp-ping.py), and
  • a ChatAgent orchestration client (client-local-mcp.py) that uses the local MCP server as a tool.

It uses the STDIO transport for MCP, which means the client launches the server as a subprocess and the two sides exchange JSON‑RPC messages over stdin/stdout.

Files

  • agent-as-mcp-svr.py — MCP server that exposes the agent via agent.as_mcp_server() and stdio_server().
  • mcp-ping.py — Minimal client that launches the server with stdio_client(), lists tools, and calls the agent tool.
  • client-local-mcp.pyChatAgent orchestration example using MCPStdioTool to connect to the local server.

Prerequisites

  • Python 3.10+
  • Recommended: a virtual environment
  • Packages:
    pip install --pre agent-framework mcp anyio azure-identity python-dotenv
    

Environment Configuration

If you use Azure OpenAI (recommended):

export AZURE_OPENAI_ENDPOINT="https://<your-endpoint>.cognitiveservices.azure.com/"
export AZURE_OPENAI_RESPONSES_DEPLOYMENT_NAME="gpt-4o"     # responses / agent usage
export AZURE_OPENAI_CHAT_DEPLOYMENT_NAME="gpt-4o"          # optional for chat client
export AZURE_OPENAI_API_VERSION="2025-03-01-preview"       # or 'preview'
# One of:
export AZURE_OPENAI_API_KEY="<your-key>"                   # simplest
# OR AAD-based:
# (unset REQUESTS_CA_BUNDLE SSL_CERT_FILE; az login)
# export AZURE_USE_CLI=1

Corporate CA bundle users: ensure REQUESTS_CA_BUNDLE (and optionally SSL_CERT_FILE) point to a valid PEM path. For az login, you may need to temporarily unset those vars.

How to Run

1) Quick local ping (STDIO client/server)

This starts the server as a subprocess and calls the agent tool:

python mcp-ping.py

Expected output (abridged):

TOOLS: ['RestaurantAgent']
== RestaurantAgent input schema ==
{ ... JSON schema ... }

== Health Check (JSON) ==
{ "status": "ok", "endpoint": "...", ... }

2) Orchestrated ChatAgent using the MCP server

This lets a ChatAgent use the local MCP server as a tool:

python client-local-mcp.py

It will run a sequence of prompts (health check, menu list, dietary filter, pricing, happy hour).

Troubleshooting

  • Invalid JSON / EOF when running the server alone — you launched the server without a client. Use mcp-ping.py (they start the server and speak MCP).
  • Token/credential errors — provide AZURE_OPENAI_API_KEY or AZURE_USE_CLI=1 with az login. For AAD chains, DefaultAzureCredential must be able to find an identity.
  • Tool arg mismatch — the agent-as-tool typically expects a single task string. Ensure clients send {"task":"your prompt"}.

How it Works (STDIO)

  • Server: stdio_server() exposes async stdin/stdout streams; server.run() handles JSON‑RPC (initialize/list_tools/call_tool).
  • Client: stdio_client() launches the server process and returns streams; ClientSession drives the JSON‑RPC calls.