ApiColombiaMCP
# ApiColombiaMCP
A Model Context Protocol (MCP) server that provides information about Colombia through the API Colombia service.
## π Data Source
This project uses the **API Colombia** service for educational and practical purposes. The API provides comprehensive information about Colombia including departments, regions, cities, and general country data.
- **API URL**: https://api-colombia.com/
- **Documentation**: https://api-colombia.com/#informacionAPIS
- **Purpose**: Educational and practical implementation of MCP server
- **Data Coverage**: Departments, regions, cities, tourist attractions, and general country information
> **Note**: This implementation is for educational and practical purposes only. The API Colombia service is a public, open-source project that provides free access to Colombian data.
## ποΈ Architecture Overview
This project follows **Clean Architecture** principles with a modular, scalable structure designed for maintainability and extensibility.
### π Project Structure
```
ApiColombiaMCP/
βββ src/
β βββ index.ts # Main server entry point
β βββ services/ # Business logic layer
β β βββ country.services.ts # Country data operations
β βββ tools/ # Tool definitions layer
β β βββ index.ts # MCP tool configurations
β βββ shared/ # Shared utilities layer
β βββ constants/ # Centralized constants
β β βββ index.ts # Tool names, descriptions, config
β βββ types/ # Type definitions
β β βββ response.mcp.ts # MCP response types
β βββ index.ts # Shared exports
βββ .env # Environment variables
βββ package.json # Dependencies and scripts
βββ tsconfig.json # TypeScript configuration
```
## π― Architecture Layers
### 1. **Presentation Layer** (`index.ts`)
- **Responsibility**: Server initialization and tool registration
- **Key Features**:
- Uses constants for configuration
- Dynamic tool registration from centralized configuration
- Clean separation from business logic
### 2. **Tools Layer** (`tools/`)
- **Responsibility**: MCP tool definitions and configurations
- **Key Features**:
- Centralized tool configuration
- Interface-based tool definitions
- Easy extension for new tools
- Type-safe tool registration
### 3. **Business Logic Layer** (`services/`)
- **Responsibility**: Core business operations
- **Key Features**:
- External API integration
- Data transformation and formatting
- Error handling and validation
- Environment-based configuration
### 4. **Shared Layer** (`shared/`)
- **Responsibility**: Cross-cutting concerns and utilities
- **Key Features**:
- Centralized constants and configuration
- Shared type definitions
- Error message standardization
- Reusable utilities
## π§ Key Components
### Constants (`shared/constants/index.ts`)
```typescript
export const TOOL_NAMES = {
GET_COUNTRY: 'getCountry',
} as const;
export const TOOL_DESCRIPTIONS = {
GET_COUNTRY: 'Get information about a country',
} as const;
```
### Tool Configuration (`tools/index.ts`)
```typescript
export interface ToolConfig {
name: string;
description: string;
handler: () => Promise<ApiColombiaResponse>;
}
export const tools: ToolConfig[] = [
{
name: TOOL_NAMES.GET_COUNTRY,
description: TOOL_DESCRIPTIONS.GET_COUNTRY,
handler: getCountry,
},
];
```
### Service Implementation (`services/country.services.ts`)
- Fetches data from API Colombia
- Formats response for MCP compatibility
- Handles errors gracefully
- Uses environment variables for configuration
## π Adding New Tools
To add a new tool, follow these steps:
1. **Add constants** in `shared/constants/index.ts`:
```typescript
export const TOOL_NAMES = {
GET_COUNTRY: 'getCountry',
NEW_TOOL: 'newTool', // Add your new tool name
} as const;
```
2. **Create service** in `services/` directory:
```typescript
// services/new-tool.service.ts
export async function newToolService(): Promise<ApiColombiaResponse> {
// Your implementation
}
```
3. **Add tool configuration** in `tools/index.ts`:
```typescript
export const tools: ToolConfig[] = [
{
name: TOOL_NAMES.GET_COUNTRY,
description: TOOL_DESCRIPTIONS.GET_COUNTRY,
handler: getCountry,
},
{
name: TOOL_NAMES.NEW_TOOL,
description: TOOL_DESCRIPTIONS.NEW_TOOL,
handler: newToolService,
},
];
```
## π Environment Configuration
The project uses environment variables for configuration:
```bash
# .env
API_COLOMBIA_URL=https://api-colombia.com/api/
```
The service gracefully falls back to default URLs if environment variables are not set.
## π§ͺ Development
### Prerequisites
- Node.js (v16.9+ or v14.19+)
- pnpm (package manager)
### Package Manager Setup
This project uses **pnpm** as the package manager. If you encounter package manager conflicts:
1. **Enable Corepack** (included with Node.js 16.9+):
```bash
corepack enable
```
2. **Install pnpm** (if not available):
```bash
npm install -g pnpm
```
3. **Verify pnpm version**:
```bash
pnpm --version
```
### Installation
```bash
# Install dependencies
pnpm install
# Build the project
pnpm build
# Run the MCP server
node build/index.js
```
### Troubleshooting Package Manager Issues
If you see package manager errors:
- Ensure Corepack is enabled: `corepack enable`
- Clear npm cache: `npm cache clean --force`
- Use pnpm directly instead of npm/yarn
- Check that `.npmrc` file exists in the project root
## π Features
- **Country Information**: Get comprehensive data about Colombia
- **Clean Architecture**: Modular, testable, and maintainable code
- **Type Safety**: Full TypeScript support
- **Error Handling**: Graceful error management
- **Environment Configuration**: Flexible configuration management
- **Scalable Design**: Easy to extend with new tools
## π§ Technologies Used
- **TypeScript**: Type-safe JavaScript
- **MCP SDK**: Model Context Protocol server development
- **Zod**: Schema validation
- **Node.js**: Runtime environment
## π― Benefits of This Architecture
- **π Scalability**: Easy to add new tools and features
- **π Maintainability**: Clear separation of concerns
- **π§ͺ Testability**: Each layer can be tested independently
- **π Type Safety**: Full TypeScript coverage
- **π Consistency**: Centralized configuration and constants
- **π§ Flexibility**: Environment-based configuration
- **π Readability**: Clean, well-organized code structure
This architecture ensures your MCP server is ready for production use and can grow with your needs!TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: getCountry retrieves country-level information, getRegions lists regions, getRegionById provides details for a specific region, and getDepartmentsByRegion fetches departments for a given region. There is no overlap in functionality, making tool selection straightforward.
All tool names follow a consistent verb_noun pattern with camelCase styling (e.g., getCountry, getRegions, getRegionById, getDepartmentsByRegion). The naming is predictable and enhances readability across the toolset.
With 4 tools, the count is reasonable for a server focused on Colombian geographic data. It covers key entities (country, regions, departments) but feels slightly thin, as operations like searching or filtering might be missing, though not critical for the core scope.
The toolset provides good coverage for retrieving geographic information in Colombia, including country details, regions, and departments. However, there are minor gaps, such as no tools for cities or municipalities, which agents might need to work around for more granular data.