Skip to main content
Glama
sadeghetemad

wikipedia-mcp-agent

by sadeghetemad
README.md
# 🌐 Wikipedia MCP Agent

> A conversational AI agent that searches and reads Wikipedia using the **Model Context Protocol (MCP)**, **LangGraph**, and **AWS Bedrock (Claude Sonnet)**.

![Python](https://img.shields.io/badge/Python-3.10%2B-blue?logo=python&logoColor=white)
![LangGraph](https://img.shields.io/badge/LangGraph-agent-orange?logo=langchain&logoColor=white)
![MCP](https://img.shields.io/badge/MCP-Model%20Context%20Protocol-purple)
![AWS Bedrock](https://img.shields.io/badge/AWS-Bedrock-FF9900?logo=amazonaws&logoColor=white)
![License](https://img.shields.io/badge/License-MIT-green)

---

## Overview

This project wires together three modern AI infrastructure pieces:

1. **MCP (Model Context Protocol)** — a standard way to expose tools, prompts, and resources to an LLM
2. **LangGraph** — a graph-based agent framework for multi-step reasoning with tool calls
3. **AWS Bedrock** — managed LLM inference using Anthropic's Claude Sonnet

The agent launches an MCP server as a subprocess, dynamically loads its Wikipedia tools at runtime, and runs a stateful chat loop where the LLM can call tools as needed before answering.

---

## Architecture

```
ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│                    mcp_client.py                    │
│                                                     │
│  ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”   │
│  │              LangGraph StateGraph            │   │
│  │                                              │   │
│  │   START ──► chat_node ──► tool_node ──┐      │   │
│  │                  ā–²                    │      │   │
│  │                  ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜      │   │
│  │                         │ END                │   │
│  ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜   │
│                            │ tool calls              │
│              stdin/stdout (MCP stdio transport)      │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
                             │
ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā–¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│                    mcp_server.py                    │
│                                                     │
│   Tools      search_wikipedia                       │
│              list_wikipedia_sections                │
│              get_section_content                    │
│                                                     │
│   Prompts    highlight_sections_prompt              │
│                                                     │
│   Resources  suggested_titles                       │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
                             │
                    wikipedia Python library
```

---

## Features

### Tools
| Tool | Description |
|------|-------------|
| `search_wikipedia` | Search Wikipedia and return the summary + URL of the top result |
| `list_wikipedia_sections` | List all section titles of a Wikipedia article |
| `get_section_content` | Fetch the full text of a specific section |

### Prompts
| Prompt | Description |
|--------|-------------|
| `highlight_sections_prompt` | Ask the LLM to pick the 3–5 most important sections of an article and explain why |

### Resources
| Resource | Description |
|----------|-------------|
| `suggested_titles` | Reads a local `suggested_titles.txt` file with topic suggestions |

---

## Getting Started

### Prerequisites

- Python 3.10+
- AWS account with Bedrock access enabled for `anthropic.claude-sonnet-4-6` in `eu-west-2`

### Installation

```bash
# Clone the repo
git clone https://github.com/sadeghetemad/wikipedia-mcp-agent.git
cd wikipedia-mcp-agent

# Create and activate a virtual environment
python -m venv venv
venv\Scripts\activate        # Windows
# source venv/bin/activate   # macOS / Linux

# Install dependencies
pip install -r requirements.txt
```

### AWS Credentials

Configure your credentials via the AWS CLI or environment variables:

```bash
aws configure
```

Or manually:

```bash
export AWS_ACCESS_KEY_ID=your_key
export AWS_SECRET_ACCESS_KEY=your_secret
export AWS_DEFAULT_REGION=eu-west-2
```

Make sure your IAM user/role has the `bedrock:InvokeModel` permission.

---

## Usage

```bash
python mcp_client.py
```

You will see:

```
Wikipedia MCP agent is ready.
Type a question or use one of the slash commands below:
  /prompts                       - list available prompt templates
  /prompt <name> "arg1" ...      - run a prompt template
  /resources                     - list available resources
  /resource <name or index>      - view a resource
  exit / quit / q                - quit
```

### Example session

```
You: What is quantum entanglement?
AI: Quantum entanglement is a physical phenomenon where two or more particles ...

You: /prompts
Available Prompts:
  highlight_sections_prompt  (topic)

You: /prompt highlight_sections_prompt "Black hole"
=== Prompt Result ===
• Formation — explains how black holes arise from stellar collapse
• Event horizon — the defining boundary of no return
...

You: /resources
Available Resources:
[1] suggested_titles

You: /resource 1
=== Resource Text ===
Artificial intelligence
Large language model
...
```

### Optional: `suggested_titles.txt`

Create this file in the project root (one topic per line) to populate the `suggested_titles` resource:

```
Artificial intelligence
Large language model
Model Context Protocol
Quantum computing
```

---

## Project Structure

```
wikipedia-mcp-agent/
ā”œā”€ā”€ mcp_server.py          # FastMCP server — tools, prompts, resources
ā”œā”€ā”€ mcp_client.py          # LangGraph agent + interactive chat loop
ā”œā”€ā”€ requirements.txt       # Pinned Python dependencies
ā”œā”€ā”€ suggested_titles.txt   # (optional) topic suggestions for the resource
└── README.md
```

---

## Tech Stack

| Layer | Library |
|-------|---------|
| LLM | [AWS Bedrock](https://aws.amazon.com/bedrock/) via `langchain-aws` |
| Agent framework | [LangGraph](https://github.com/langchain-ai/langgraph) |
| Tool protocol | [MCP](https://modelcontextprotocol.io) via `mcp` + `langchain-mcp-adapters` |
| Wikipedia data | [`wikipedia`](https://pypi.org/project/wikipedia/) |

---

## License

MIT