Skip to main content
Glama

MCP AI Agent Server

A dual-mode AI agent system that combines the Model Context Protocol (MCP) server capabilities with a standalone CLI agent, powered by LangChain.

🎯 Two Modes of Operation

1. MCP Server Mode

Run as an MCP server that can be connected to any MCP client (like Claude Desktop) or inspected using the MCP Inspector.

2. CLI Agent Mode

Run as a standalone command-line agent for direct interaction and task execution.

Related MCP server: mcp-server

✨ Capabilities

  • 🌐 API Interactions: Fetch weather data, news articles, and more

  • πŸ“ File Management: Read, write, search, and organize files

  • πŸ” Web Scraping: Extract data from websites

  • πŸ“Š Data Processing: Analyze and transform data

  • πŸ’‘ AI-Powered Tasks: Use LangChain for intelligent decision-making

πŸ› οΈ Tools Available

  1. Weather Tool: Get current weather for any location

  2. News Tool: Fetch latest news articles by topic

  3. File Manager: Create, read, update, delete files

  4. Web Fetcher: Download and parse web content

  5. Calculator: Perform complex calculations

  6. Search Tool: Search files and data

  7. AI Agent: LangChain MCP client powered reasoning and task execution

πŸ“¦ Installation

Prerequisites

  • Python 3.10+

  • uv package manager

  • Node.js (for MCP Inspector)

Setup

  1. Clone the repository:

git clone https://github.com/elcaiseri/mcp-ai-agent-server.git
cd mcp-ai-agent-server
  1. Install dependencies using uv:

uv pip install -e .
  1. Set up environment variables:

cp .env.example .env
# Edit .env with your API keys

Required API keys in .env:

OPENAI_API_KEY=your_openai_api_key
OPENWEATHER_API_KEY=your_openweather_api_key
NEWS_API_KEY=your_news_api_key

πŸš€ Usage

Mode 1: MCP Server with Inspector

The MCP server can be tested and debugged using the official MCP Inspector tool.

Start the server with inspector:

npx @modelcontextprotocol/inspector uv run python -m src.server

This will:

  • Launch the MCP server

  • Open the MCP Inspector in your browser

  • Allow you to test all available tools interactively

  • View request/response logs in real-time

Connect to MCP Clients:

Add to your MCP client configuration (e.g., Claude Desktop):

{
  "mcpServers": {
    "ai-agent": {
      "command": "uv",
      "args": ["run", "python", "-m", "src.server"],
      "cwd": "/path/to/mcp-ai-agent-server"
    }
  }
}

Mode 2: Standalone CLI Agent

Run the agent directly from the command line for interactive sessions.

Start the CLI agent:

uv run python -m src.client

Example interactions:

> What's the weather in Tokyo?
> Fetch the latest news about AI
> Create a file called notes.txt with today's summary
> Search for all Python files in the current directory

The CLI agent uses LangChain MCP Client to:

  • Understand natural language commands

  • Select appropriate tools automatically

  • Chain multiple operations together

  • Provide conversational responses

πŸ“š Tool Examples

Weather Tool

# Get current weather for a location
get_weather(location="New York")
# Returns: temperature, conditions, humidity, wind speed

News Tool

# Get latest news on a topic
fetch_news(topic="technology", limit=5)
# Returns: list of articles with title, description, URL

File Operations

# Create a file
create_file(path="data/output.txt", content="Hello World")

# Read a file
read_file(path="data/input.txt")

# Search files
search_files(directory=".", pattern="*.py")

Web Fetching

# Fetch webpage content
fetch_webpage(url="https://example.com")
# Returns: parsed HTML content and text

AI Agent Tasks

# Execute complex multi-step tasks
execute_agent_task(task="Analyze the weather in Tokyo and write a report")

πŸ—οΈ Architecture

mcp-ai-agent-server/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ server.py          # Main MCP server implementation
β”‚   β”œβ”€β”€ client.py          # Standalone CLI agent implementation
β”‚   β”œβ”€β”€ tools/             # Individual tool implementations
β”‚   β”‚   β”œβ”€β”€ weather.py
β”‚   β”‚   β”œβ”€β”€ news.py
β”‚   β”‚   β”œβ”€β”€ file_manager.py
β”‚   β”‚   β”œβ”€β”€ web_fetcher.py
β”‚   β”‚   └── calculator.py
β”‚   └── utils/             # Utilities
β”‚       └── config.py
β”œβ”€β”€ tests/                 # Test suite
β”œβ”€β”€ pyproject.toml         # Project configuration
β”œβ”€β”€ .env.example           # Environment template
└── README.md

πŸ”§ Development

Running Tests

uv run pytest

Code Formatting

uv run black src/
uv run ruff check src/

License

MIT License

🀝 Contributing

Contributions welcome! Please feel free to submit a Pull Request.

Available Tools

16 tools
calculateA

Evaluate a mathematical expression safely.

Args: expression: Mathematical expression (e.g., "2 + 2", "sqrt(16)")

Returns: Calculation result

Inputs: expression (required).

convert_unitsA

Convert between units.

Args: value: Numeric value to convert from_unit: Unit to convert from to_unit: Unit to convert to

Supported conversions:

  • Temperature: celsius, fahrenheit, kelvin

  • Length: meter, kilometer, mile, foot, inch

  • Weight: kilogram, gram, pound, ounce

Inputs: value (required), to_unit (required), from_unit (required).

create_fileC

Create a new file with content.

Args: path: File path (relative to data directory) content: File content

Returns: Result dictionary

Inputs: path (required), content (required).

delete_fileB

Delete a file.

Args: path: File path (relative to data directory)

Returns: Result dictionary

Inputs: path (required).

execute_commandA

Execute an arbitrary shell command with full control over execution context. This method allows running simple commands (e.g., ls, cat, echo, pwd, mv) as well as complex shell pipelines and redirections (e.g., grep pattern file | sort > output.txt). It captures both standard output and standard error, and returns structured results.

Args: command (str): Command to execute (any valid shell command) cwd (str, optional): Relative Working directory (defaults to data directory) timeout (int, optional): Command timeout in seconds

Returns: Result dictionary with stdout, stderr, and return code

Inputs: command (required), cwd, timeout.

fetch_newsC

Fetch news articles on a topic.

Args: topic: Search query/topic limit: Number of articles to return language: Language code (default: en)

Returns: Dictionary with news articles

Inputs: topic (required), limit, language.

fetch_webpageB

Fetch content from a webpage.

Args: url: URL to fetch extract_text: If True, extract and clean text content

Returns: Webpage content and metadata

Inputs: url (required), extract_text.

forget_memoryA

Remove one or all items from persistent memory.

If the input key is "ALL", the entire memory store is cleared. Otherwise, only the specified key will be removed if it exists.

Args: input_data (Dict[str, Any]): A dictionary containing a single key "key" that specifies which memory entry to remove, or "ALL" to clear all entries.

Returns: Dict[str, Any]: A result dictionary indicating success, failure, or whether the requested key was not found.

Inputs: input_data (required).

get_weatherA

Get current weather for a location.

Args: location: City name or "City, Country Code"

Returns: Dictionary with weather information

Inputs: location (required).

list_directoryB

List contents of a directory.

Args: directory: Directory path (relative to data directory)

Returns: Directory contents

Inputs: directory.

read_fileB

Read file content.

Args: path: File path (relative to data directory)

Returns: File content and metadata

Inputs: path (required).

retrieve_current_working_directoryA

Retrieve the current working directory used as the base data path. This directory serves as the root location for all tools or operations that require file paths, relative directories, or working directory references.

Returns: Result Working Directory Path dictionary

Inputs: no named parameters.

retrieve_memoryB

Retrieve the entire memory store.

Returns: Any: The complete memory store as a dictionary.

Inputs: no named parameters.

search_filesB

Search for files matching a pattern.

Args: directory: Directory to search (relative to data directory) pattern: Glob pattern (e.g., ".txt", "data_")

Returns: List of matching files

Inputs: pattern, directory.

store_memoryA

Store one or more key–value pairs in persistent memory. This method updates the existing memory store with the provided key–value pairs. If a key already exists, its value will be overwritten.

Args: input_data (Dict[str, Any]): A dictionary containing one or more key–value pairs to be stored.

Returns: Dict[str, Any]: A result dictionary indicating success and listing the stored items.

Inputs: input_data (required).

update_fileC

Update existing file content.

Inputs: path (required), content (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 16 tools

    Disambiguation4/5

    Most tools are clearly distinct, but execute_command is very broad and could be used to replicate file operations or other tasks, causing potential overlap. Otherwise, file operations, memory, and web fetching are well-separated.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_file, fetch_webpage, store_memory). Even longer names like retrieve_current_working_directory adhere to the pattern. No mixing of conventions.

    Tool Count5/5

    16 tools is a well-scoped set for an AI agent server, covering file operations, web fetching, weather, news, computation, unit conversion, and memory. Each tool has a clear role without being excessive.

    Completeness4/5

    The tool set covers most key operations for its domain: CRUD for files, memory storage and retrieval, web and news fetching, weather, calculation, and conversions. Minor gaps exist (e.g., no explicit memory update function, but store can overwrite), but overall it is comprehensive.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers