Skip to main content
Glama
kcbdev

Morocco Open Data MCP

by kcbdev

πŸ‡²πŸ‡¦ Morocco Open Data MCP Server

A comprehensive Model Context Protocol (MCP) server providing unified access to Moroccan government data sources, financial markets, geographic information, and more.

πŸ“‹ Table of Contents

Related MCP server: GovUK MCP Server

✨ Features

πŸ›οΈ National Open Data

  • Access to data.gov.ma - Morocco's national open data portal

  • Search datasets in Arabic, French, and English

  • Browse by organization, tags, and categories

  • Download resources in various formats (CSV, JSON, XML, etc.)

πŸ’° Financial & Macroeconomic Data

  • Bank Al-Maghrib (Central Bank)

    • Exchange rates (daily updates)

    • Key interest rates and monetary policy

    • Inflation and consumer price indices

    • Money supply aggregates (M1, M2, M3)

    • Treasury bills auction results

    • Foreign reserves data

  • Casablanca Stock Exchange (BVC)

    • Real-time stock quotes

    • Market indices (MASI, MASIX, etc.)

    • Company information and financials

    • Government and corporate bonds

    • Market statistics and trading data

🌍 International Data

  • World Bank Indicators

    • GDP and economic growth

    • Population and demographics

    • Poverty and social indicators

    • Trade and balance of payments

    • Environmental statistics

πŸ•Œ Islamic Services

  • Prayer times for all major Moroccan cities

  • Weekly and monthly prayer schedules

  • Qibla direction calculations

  • Hijri calendar integration

πŸ—ΊοΈ Geography & GIS

  • Administrative divisions (12 regions)

  • City coordinates and metadata

  • Searchable city database

  • Regional information in multiple languages

🀝 Humanitarian & Crisis Data

  • Humanitarian Data Exchange (HDX) integration

  • Emergency response datasets

  • Refugee and displacement data

  • Health and education statistics

🌱 Climate & Environment

  • Climate data and weather patterns

  • Environmental indicators

  • CO2 emissions tracking

  • Renewable energy statistics

πŸš€ Quick Start

Prerequisites

  • Node.js 18.0 or higher

  • npm or yarn

  • Claude Desktop (for MCP integration)

1. Clone the Repository

cd "MoroccoOpenData MCP"

2. Install Dependencies

npm install

3. Build the Server

npm run build

4. Configure Environment

cp .env.example .env
# Edit .env and add your API keys

5. Test the Server

npm test

6. Run the Server

# Development mode (with hot reload)
npm run dev

# Production mode
npm start

πŸ“¦ Installation

Using npm

npm install -g morocco-open-data-mcp

From Source

git clone https://github.com/kcbdev/morocco-open-data-mcp.git
cd morocco-open-data-mcp
npm install
npm run build

Using Docker

# Build the image
docker build -t morocco-open-data-mcp .

# Run the container
docker run -d \
  --name morocco-mcp \
  -e MCP_TRANSPORT=http \
  -e MCP_PORT=3000 \
  -e BAM_KEY_CHANGES=your_key \
  morocco-open-data-mcp

Using Docker Compose

# Create .env file with your API keys
cp .env.example .env

# Start all services
docker-compose up -d

# View logs
docker-compose logs -f

βš™οΈ Configuration

Environment Variables

Variable

Description

Default

MCP_TRANSPORT

Transport mode: stdio or http

auto

MCP_PORT

HTTP server port (when using HTTP transport)

3000

MCP_HOST

HTTP server host

0.0.0.0

BAM_KEY_CHANGES

Bank Al-Maghrib API key for exchange rates

Required for BAM data

BAM_KEY_OBLIGATIONS

BAM API key for government obligations

Required for obligations

BAM_KEY_TBILLS

BAM API key for treasury bills

Required for T-bills

WORLD_BANK_API_KEY

World Bank API key

Optional (some endpoints)

ACLED_API_KEY

ACLED API key for crisis data

Optional

OPENWEATHER_API_KEY

OpenWeatherMap API key

Optional

CACHE_TTL_DEFAULT

Default cache TTL (seconds)

3600

CACHE_TTL_SHORT

Short-term cache TTL (seconds)

300

CACHE_TTL_LONG

Long-term cache TTL (seconds)

86400

RATE_LIMIT_DEFAULT

Default rate limit (req/min)

60

RATE_LIMIT_STRICT

Strict rate limit (req/min)

10

Claude Desktop Configuration

Add to your claude_desktop_config.json:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json

For Local Development (stdio transport):

{
  "mcpServers": {
    "morocco-open-data": {
      "command": "node",
      "args": ["/home/kcb/Work/LABS/MOPD/MoroccoOpenData MCP/dist/index.js"],
      "env": {
        "BAM_KEY_CHANGES": "your_key_here",
        "BAM_KEY_OBLIGATIONS": "your_key_here",
        "BAM_KEY_TBILLS": "your_key_here"
      }
    }
  }
}

For Remote Server (HTTP SSE transport):

{
  "mcpServers": {
    "morocco-open-data": {
      "url": "https://morocco-opendata-mcp.kcb.ma",
      "transportType": "sse"
    }
  }
}

Using mcp-remote:

{
  "mcpServers": {
    "morocco-open-data": {
      "command": "npx",
      "args": ["-y", "mcp-remote@latest"],
      "env": {
        "MCP_SERVER_URL": "https://morocco-opendata-mcp.kcb.ma/sse"
      }
    }
  }
}

πŸ› οΈ Available Tools

Open Data (data.gov.ma)

Tool

Description

search_datasets

Search for datasets on Morocco's open data portal

get_dataset

Get detailed information about a specific dataset

list_organizations

List all data-publishing organizations

search_by_tag

Search datasets by tag

Financial & Macroeconomic

Tool

Description

get_exchange_rates

Get current exchange rates from Bank Al-Maghrib

get_interest_rates

Get key interest rates and monetary policy rates

get_inflation_data

Get inflation and CPI data

get_money_supply

Get money supply aggregates (M1, M2, M3)

get_treasury_bills

Get treasury bills auction results

get_world_bank_indicators

Get World Bank development indicators

get_morocco_economic_summary

Get comprehensive economic summary

Capital Markets

Tool

Description

get_stock_quotes

Get stock quotes from Casablanca Stock Exchange

get_market_summary

Get today's market summary

get_market_indices

Get market indices (MASI, MASIX, etc.)

get_bond_quotes

Get government and corporate bond quotes

get_company_info

Get detailed company information

Geography & GIS

Tool

Description

get_morocco_regions

Get all administrative regions of Morocco

get_city_coordinates

Get coordinates for Moroccan cities

search_cities

Search for cities by name or region

Prayer Times

Tool

Description

get_prayer_times

Get prayer times for a specific date

get_weekly_prayer_times

Get prayer times for the next 7 days

get_next_prayer

Get the next upcoming prayer time

list_prayer_cities

List all available Moroccan cities

Humanitarian & Crisis

Tool

Description

get_humanitarian_datasets

Search humanitarian datasets from HDX

Climate & Environment

Tool

Description

get_climate_data

Get climate and weather data

get_environmental_indicators

Get environmental indicators (CO2, renewable energy, etc.)

Knowledge Graph

Tool

Description

search_knowledge_graph

Search the Morocco knowledge graph

get_data_sources

Get list of all available data sources

πŸ“– Usage Examples

Example 1: Search for Economic Datasets

Search for datasets about Morocco's economy on data.gov.ma

Example 2: Get Current Exchange Rates

What's the current exchange rate for EUR to MAD?
Show me all exchange rates from Bank Al-Maghrib

Example 3: Stock Market Information

Get me the current stock price for Attijariwafa Bank
Show me today's market summary from Casablanca Stock Exchange
What are the top gainers today?

Example 4: Prayer Times

What are the prayer times for today in Marrakech?
When is the next prayer in Rabat?
Show me the weekly prayer schedule for Casablanca

Example 5: Economic Indicators

Get Morocco's GDP growth rate for the last 5 years
Show me the current inflation rate
What's the unemployment rate in Morocco?

Example 6: Geographic Data

List all regions of Morocco with their capitals
What are the coordinates of Fes?
Search for cities in the Souss-Massa region

πŸ“Š Data Sources

Tier 1 - Native REST APIs

Source

Type

Status

data.gov.ma

CKAN API

βœ… Active

Bank Al-Maghrib

REST API

βœ… Active

Casablanca Stock Exchange

REST API

βœ… Active

World Bank

REST API

βœ… Active

Aladhan (Prayer Times)

REST API

βœ… Active

Tier 2 - Structured Downloads

Source

Type

Status

HCP (High Commission for Planning)

Portal

πŸ”„ Pending

Ministry of Economy & Finance

Portal

πŸ”„ Pending

Ministry of Health

Portal

πŸ”„ Pending

Tier 3 - International Sources

Source

Type

Status

Humanitarian Data Exchange

API

πŸ”„ Pending

ACLED (Crisis Data)

API

πŸ”„ Pending

OpenWeatherMap

API

πŸ”„ Pending

🚒 Deployment

Production Deployment with Docker

  1. Build the production image:

docker build -t morocco-open-data-mcp:latest --target production .
  1. Run with environment variables:

docker run -d \
  --name morocco-mcp \
  --restart unless-stopped \
  -e NODE_ENV=production \
  -e MCP_TRANSPORT=http \
  -e MCP_PORT=3000 \
  -e BAM_KEY_CHANGES=your_key \
  -e BAM_KEY_OBLIGATIONS=your_key \
  -e BAM_KEY_TBILLS=your_key \
  -e CACHE_TTL_DEFAULT=3600 \
  -e RATE_LIMIT_DEFAULT=60 \
  morocco-open-data-mcp:latest
  1. Monitor the container:

docker logs -f morocco-mcp
docker stats morocco-mcp

Coolify Deployment

For deployment on Coolify (https://coolify.kcb.ma):

  1. Create new resource from Git repository

  2. Repository: https://github.com/kcbdev/morocco-open-data-mcp

  3. Branch: main

  4. Domain: morocco-opendata-mcp.kcb.ma

  5. Environment Variables:

    MCP_TRANSPORT=http
    MCP_PORT=3000
    MCP_HOST=0.0.0.0
    NODE_ENV=production
    BAM_KEY_CHANGES=your_key
    BAM_KEY_OBLIGATIONS=your_key
    BAM_KEY_TBILLS=your_key

Kubernetes Deployment (Optional)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: morocco-mcp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: morocco-mcp
  template:
    metadata:
      labels:
        app: morocco-mcp
    spec:
      containers:
      - name: mcp-server
        image: ghcr.io/kcbdev/morocco-open-data-mcp:latest
        env:
        - name: NODE_ENV
          value: "production"
        - name: MCP_TRANSPORT
          value: "http"
        - name: BAM_KEY_CHANGES
          valueFrom:
            secretKeyRef:
              name: mcp-secrets
              key: bam-key-changes
        resources:
          limits:
            cpu: "1"
            memory: "512Mi"
          requests:
            cpu: "250m"
            memory: "128Mi"

πŸ‘¨β€πŸ’» Development

Project Structure

morocco-open-data-mcp/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ clients/          # API clients for each data source
β”‚   β”‚   β”œβ”€β”€ ckan.ts       # data.gov.ma client
β”‚   β”‚   β”œβ”€β”€ bam.ts        # Bank Al-Maghrib client
β”‚   β”‚   β”œβ”€β”€ worldbank.ts  # World Bank client
β”‚   β”‚   β”œβ”€β”€ bvc.ts        # Casablanca Stock Exchange client
β”‚   β”‚   β”œβ”€β”€ prayer.ts     # Prayer times client
β”‚   β”‚   β”œβ”€β”€ geo.ts        # Geography/GIS client
β”‚   β”‚   β”œβ”€β”€ hdx.ts        # Humanitarian Data Exchange client
β”‚   β”‚   └── weather.ts    # Weather API client
β”‚   β”œβ”€β”€ lib/              # Core utilities
β”‚   β”‚   β”œβ”€β”€ cache.ts      # Caching layer
β”‚   β”‚   β”œβ”€β”€ rateLimiter.ts # Rate limiting
β”‚   β”‚   β”œβ”€β”€ arabic.ts     # Arabic text processing
β”‚   β”‚   └── errors.ts     # Error handling
β”‚   β”œβ”€β”€ sync/             # Data synchronization jobs
β”‚   β”œβ”€β”€ index.ts          # Main server entry point
β”‚   └── test.ts           # Test suite
β”œβ”€β”€ package.json
β”œβ”€β”€ tsconfig.json
β”œβ”€β”€ Dockerfile
β”œβ”€β”€ docker-compose.yml
β”œβ”€β”€ claude_desktop_config.json
└── README.md

Development Commands

# Install dependencies
npm install

# Run in development mode with hot reload
npm run dev

# Build for production
npm run build

# Run tests
npm test

# Run sync jobs manually
npm run sync

# Start production server
npm start

Running Tests

# Run all tests
npm test

# Run tests with external APIs disabled
SKIP_EXTERNAL_APIS=true npm test

# Run specific test file
npx tsx src/test.ts

πŸ”‘ API Keys

Required API Keys

Bank Al-Maghrib (BAM)

  • Registration: Visit Bank Al-Maghrib and request API access

  • Endpoints: Exchange rates, treasury bills, government obligations

  • Rate Limits: 30 requests/minute

World Bank

Optional API Keys

Service

Purpose

Registration

ACLED

Crisis/conflict data

ACLED

OpenWeatherMap

Weather data

OpenWeatherMap

HDX

Humanitarian data

HDX

πŸ› Troubleshooting

Common Issues

1. "Module not found" errors

# Rebuild the project
rm -rf dist/
npm run build

2. API rate limit errors

  • Check your rate limit status in logs

  • Increase RATE_LIMIT_DEFAULT in .env

  • Implement request caching

3. BAM API authentication errors

  • Verify API keys are correct

  • Check if keys have expired

  • Ensure keys have correct permissions

4. Claude Desktop integration issues

  • Verify path to dist/index.js is correct

  • Check Claude Desktop logs

  • Restart Claude Desktop after config changes

5. SSE Connection Failed

  • Ensure MCP_TRANSPORT=http is set in environment variables

  • Verify the server is running in HTTP mode

  • Check firewall allows connections to port 3000

Debug Mode

Enable verbose logging:

NODE_ENV=development DEBUG=* npm run dev

Health Checks

# Check if server is running (HTTP mode)
curl https://morocco-opendata-mcp.kcb.ma/health

# Check if server is running (local stdio mode)
node -e "console.log('MCP server healthy')"

# The server will log status of all data sources on startup

🀝 Contributing

We welcome contributions! Please follow these guidelines:

Getting Started

  1. Fork the repository: https://github.com/kcbdev/morocco-open-data-mcp

  2. Create a feature branch: git checkout -b feature/your-feature

  3. Make your changes

  4. Run tests: npm test

  5. Commit your changes: git commit -am 'Add new feature'

  6. Push to the branch: git push origin feature/your-feature

  7. Submit a pull request

Code Style

  • Follow TypeScript best practices

  • Use ESLint rules (coming soon)

  • Write meaningful commit messages

  • Add tests for new features

  • Update documentation

Areas for Contribution

  • Additional data sources (ministries, agencies)

  • More geographic data (provinces, communes)

  • Historical data archives

  • Data visualization tools

  • Arabic/French language improvements

  • Performance optimizations

  • Documentation translations

πŸ“„ License

This project is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License (CC BY-NC 4.0).

See the LICENSE file for details.

What This Means:

  • βœ… You CAN: Share, copy, redistribute, adapt, and build upon this material

  • βœ… You MUST: Give appropriate credit, provide a link to the license, and indicate if changes were made

  • ❌ You CANNOT: Use this material for commercial purposes

  • ❌ You CANNOT: Apply legal terms or technological measures that restrict others from doing anything the license permits

For commercial licensing inquiries, contact: oss@kcb.ma


πŸ“ž Support

πŸ™ Acknowledgments

  • Bank Al-Maghrib - For providing financial and economic data

  • data.gov.ma - Morocco's national open data portal

  • World Bank - For development indicators and statistics

  • Casablanca Stock Exchange - For market data

  • Aladhan API - For prayer times services

  • MCP Project - For the Model Context Protocol framework


Built with ❀️ for Morocco's open data community

Morocco Open Data MCP Server v1.0.0
Live Deployment: https://morocco-opendata-mcp.kcb.ma
Source Code: https://github.com/kcbdev/morocco-open-data-mcp

Available Tools

28 tools
get_bond_quotesB

Get government and corporate bond quotes from Casablanca Stock Exchange

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoBond type: 'government', 'corporate', or 'all'all

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, and the description only states the basic function without disclosing behavioral traits such as data freshness, rate limits, or authentication requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, highly concise, and front-loaded with key information. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no hints about return format (e.g., prices, yields). The tool's simplicity does not fully compensate for missing behavioral and output context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a well-described parameter including default. The description adds no extra meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'Get', resource 'bond quotes', specifies types 'government and corporate', and location 'Casablanca Stock Exchange'. Clearly distinguishes from siblings like get_stock_quotes and get_treasury_bills.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use vs alternatives. Usage is implied by name and description, but no direct comparison or conditions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_city_coordinatesB

Get coordinates and administrative info for Moroccan cities

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Casablanca', 'Rabat')

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full burden of behavioral disclosure, but it only states the tool 'gets' data, implying read-only, without mentioning rate limits, data sources, or any other side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-formed sentence with no filler or redundant information, efficiently conveying the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, the description fails to specify what 'coordinates and administrative info' includes (e.g., latitude/longitude, region name), leaving the expected return structure ambiguous.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides a clear description for the 'city' parameter with examples. The description adds valuable context by specifying the geographic scope (Moroccan cities), going beyond the schema's literal property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves coordinates and administrative info for Moroccan cities, using a specific verb-resource combination that distinguishes it from sibling tools focused on other data types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus sibling tools like 'get_morocco_regions' or 'search_cities', leaving the agent to infer context without explicit usage instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_climate_dataB

Get climate and weather data for Morocco (temperature, precipitation, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault
locationNoCity or region name
startDateNoStart date YYYY-MM-DD
endDateNoEnd date YYYY-MM-DD

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It does not disclose data freshness, rate limits, or whether data is historical or forecast. Only mentions example metrics (temperature, precipitation, etc.) without specifics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence that is concise and front-loaded with key information. Could be slightly improved with structure or bullet points.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description should explain return values. It only vaguely mentions 'temperature, precipitation, etc.' without listing available metrics or acknowledging optional parameters. Incomplete for a data retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all three parameters. Description adds no extra meaning beyond the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'Get', resource 'climate and weather data', and geographic scope 'for Morocco'. Distinguishes from siblings like get_environmental_indicators or get_morocco_economic_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like get_environmental_indicators or get_inflation_data. No prerequisites or context for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_infoC

Get detailed company information from Casablanca Stock Exchange

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock symbol (e.g., 'ATW' for Attijariwafa Bank)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description bears full responsibility. It does not disclose behavioral traits such as whether the operation is read-only, error behavior, or rate limits. The description is too minimal to provide transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that efficiently conveys the purpose with no redundant words. It is appropriately front-loaded and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema, the description should hint at what 'detailed company information' includes (e.g., name, sector, financials). It does not, leaving the agent uncertain about the return format. For a simple tool, it is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with a single parameter that is clearly described in the schema. The description adds no additional meaning beyond what the schema provides, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'get' and the resource 'company information' from a specific source (Casablanca Stock Exchange). It is distinct from sibling tools like get_stock_quotes, but does not explicitly differentiate itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description does not mention any prerequisites or typical use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_datasetB

Get detailed information about a specific dataset from data.gov.ma

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDataset ID or name

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only says 'Get detailed information' but does not disclose return fields, authorization needs, or side effects. It adds no behavioral context beyond the basic purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the purpose with no filler. It is efficient but could benefit from additional detail without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should at least hint at the return structure (e.g., fields like title, description, date). It does not, leaving the agent uninformed about what 'detailed information' contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with 'Dataset ID or name'. The description adds no extra meaning beyond the schema. Baseline 3 is appropriate as the schema already documents the parameter adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get detailed information about a specific dataset from data.gov.ma', using a specific verb and resource. It distinguishes from sibling tools like search_datasets (which searches) and list_organizations (which lists organizations).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like search_datasets or other get_* tools. The context implies it's for a specific dataset from data.gov.ma, but no when-not or exclusions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_data_sourcesA

Get list of all available data sources and their status

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It does not disclose behavioral traits such as authentication requirements, rate limits, pagination, or what 'status' values mean. The description is minimal and lacks transparency about the response format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with 10 words. It is front-loaded and efficient. Could be slightly more informative (e.g., clarifying 'status'), but overall concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no params, no output schema), the description is minimally adequate. It explains what the tool returns but does not specify output structure (e.g., whether it's an array or object). For an agent, this might be sufficient to invoke the tool, but more detail would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the input schema is empty. Schema coverage is 100% by default. The description does not need to add parameter info. Baseline for 0 parameters is 4, and the description is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get'), the resource ('list of all available data sources'), and includes status. It distinguishes itself from sibling tools that retrieve specific data (e.g., get_bond_quotes) by being a meta-list tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool's purpose is self-evident: to list all data sources. No specific usage guidelines are given, but the context of sibling tools makes it clear this is the only tool for discovering available sources. No exclusions needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_environmental_indicatorsB

Get environmental indicators for Morocco (CO2 emissions, renewable energy, forest area)

ParametersJSON Schema
NameRequiredDescriptionDefault
indicatorNoIndicator type: 'co2', 'renewable', 'forest', 'all'

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry behavioral context. It says 'get' but doesn't disclose data source, update frequency, units, or return format. Minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no fluff. Efficiently conveys the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description should hint at return structure. It does not describe what the output contains (e.g., values, time series). Incomplete for a tool with no schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (one parameter documented). The description merely restates the indicator types, adding no new meaning beyond the schema. Baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches environmental indicators for Morocco, listing specific types (CO2, renewable, forest). This distinguishes it from siblings like get_morocco_economic_summary or get_world_bank_indicators.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like get_climate_data or get_world_bank_indicators. The description does not mention exclusions or context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_exchange_ratesB

Get current exchange rates from Bank Al-Maghrib (Morocco's central bank)

ParametersJSON Schema
NameRequiredDescriptionDefault
currencyNoSpecific currency code (e.g., USD, EUR). Leave empty for all currencies
dateNoDate in YYYY-MM-DD format (default: today)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fails to disclose important behavioral traits such as whether the rates are delayed or real-time, any rate limits, or that the data is specific to Morocco. The source is mentioned but not enough to fully understand behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-formed sentence with no extraneous words. It is front-loaded with the key action and source.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (two optional parameters, no output schema), the description is minimally adequate but lacks context about the data format, refresh frequency, or any caveats. It does not compensate for the missing annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides full coverage (100% with descriptions) for both parameters. The description adds no additional meaning beyond what the schema states, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves current exchange rates from a specific source (Bank Al-Maghrib). It is unambiguous but does not explicitly mention that the base currency is Moroccan dirham, which could be inferred from the source.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like get_inflation_data or get_interest_rates. The description does not explain that it returns official rates or specify that the date parameter is for historical queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_humanitarian_datasetsB

Search humanitarian datasets for Morocco from Humanitarian Data Exchange (HDX)

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoSearch query (e.g., 'earthquake', 'refugees', 'health')
limitNoNumber of results

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It states the tool searches data but does not clarify whether it is read-only, any authentication needs, rate limits, or pagination behavior. For a search tool, the lack of explicit read-only assurance is a gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is concise and front-loaded with the main action. However, it misses an opportunity to add one more sentence clarifying behavior (e.g., 'Returns a list of dataset names and metadata') without becoming verbose, preventing a score of 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a simple tool with 2 parameters and no output schema, the description provides the essential purpose but lacks completeness in terms of return format and differentiation from similar tools like search_datasets. It is adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with descriptions for both parameters ('query' and 'limit'), so the schema itself fully defines them. The description adds no additional parameter context, meeting the baseline for full schema coverage. No improvement or degradation from baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Search', specifies the resource 'humanitarian datasets', scopes to 'Morocco', and indicates the source 'Humanitarian Data Exchange (HDX)'. This effectively distinguishes the tool from siblings like search_datasets (general) and get_morocco_economic_summary (economic focus).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when searching for humanitarian data related to Morocco from HDX. However, it provides no explicit guidance on when to use this tool versus alternatives (e.g., search_datasets for broader searches, get_climate_data for environmental data). No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_inflation_dataA

Get inflation and consumer price index data from Bank Al-Maghrib

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoYear (default: current year)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the burden. It states it gets data, which implies a read operation, but does not disclose any behavioral traits such as data freshness, auth requirements, or error handling. However, the tool is simple, and the description is not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no wasted words. It is front-loaded with the key action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (one optional parameter, no output schema), the description is largely complete. It could mention that data is for Morocco, but that is implied by the source. No significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage for the single parameter 'year', so the description adds minimal value beyond stating the source. The baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (Get), resource (inflation and consumer price index data), and source (Bank Al-Maghrib), which distinguishes it from sibling tools like get_exchange_rates or get_interest_rates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives, nor any conditions or prerequisites. The description is minimal and does not help an agent decide between this and other economic data tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_interest_ratesB

Get key interest rates and monetary policy rates from Bank Al-Maghrib

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoRate type: 'key' for main rate, 'all' for all ratesall

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must disclose behavioral traits. It omits details like response format, pagination, rate limits, or authentication requirements. Only states the data source, which is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, no redundant words, front-loaded with verb. Every part is meaningful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and no output schema, the description is mostly adequate. It lacks details on historical data or formatting, but provides essential purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter 'type' is documented in the schema. The description does not add extra meaning beyond the schema, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'Get', resource 'key interest rates and monetary policy rates', and source 'Bank Al-Maghrib'. This distinguishes it from sibling tools like get_inflation_data or get_exchange_rates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives (e.g., get_treasury_bills, get_money_supply). The description implies it's for 'key' rates, but does not specify scenarios or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_indicesB

Get all market indices from Casablanca Stock Exchange (MASI, MASIX, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNoSpecific index code (e.g., 'MASI', 'MASIX')

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided. Description does not disclose behavior like data freshness, rate limits, or whether the optional 'index' parameter filters results (only schema hints). Lacks information on response structure or limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with front-loaded verb and resource. No redundant information, highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and simple input, description does not specify return fields (e.g., code, value, change) or whether data is current/historical. Minimal but adequate for a simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a parameter description. The description adds no new meaning beyond examples (MASI, MASIX) but does not clarify how the parameter affects results (e.g., filter vs all). Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves 'all market indices' from a specific exchange, with examples (MASI, MASIX). This distinguishes it from siblings like get_stock_quotes (individual stocks) and get_market_summary (likely aggregate).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. Does not specify prerequisites or context for selection among sibling tools like get_market_summary or get_stock_quotes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_summaryA

Get today's market summary from Casablanca Stock Exchange (indices, top gainers/losers, volume)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It states 'get today's market summary' but does not disclose whether data is cached, if authentication is needed, or how freshness is handled. For a read operation, more detail is expected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no wasted words. It front-loads the key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description mentions key output components (indices, top gainers/losers, volume) which is helpful given no output schema. However, it lacks details about data format or pagination. For a simple tool, this is adequate but could be slightly more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has zero parameters, so baseline is 4. No parameter info is needed, and description does not add any, which is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: getting today's market summary from Casablanca Stock Exchange with specific components (indices, top gainers/losers, volume). This distinguishes it from sibling tools like get_market_indices or get_stock_quotes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like get_market_indices or get_stock_quotes. The description implies it is for a broad overview, but does not provide exclusions or comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_money_supplyB

Get money supply aggregates (M1, M2, M3) from Bank Al-Maghrib

ParametersJSON Schema
NameRequiredDescriptionDefault
startDateNoStart date YYYY-MM-DD
endDateNoEnd date YYYY-MM-DD

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description bears the full burden of disclosing behavioral traits. It only states the tool 'gets' data but does not mention whether it is read-only, the nature of the data (e.g., historical, real-time), authentication needs, or any limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded and contains no unnecessary words. Every part is relevant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the tool retrieving economic aggregates, the description lacks context about the time series, frequency, or return structure. No output schema exists, and annotations are missing. The agent would lack information on how to interpret results or handle edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the two parameters (startDate and endDate), so the schema already documents their purpose. The description adds no additional meaning beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' and identifies the resource 'money supply aggregates (M1, M2, M3)' and the source 'Bank Al-Maghrib'. It clearly distinguishes from sibling tools like get_inflation_data or get_interest_rates, which focus on different economic indicators.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. There is no mention of prerequisites, context, or when not to use it. The agent is left to infer usage solely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_morocco_economic_summaryA

Get comprehensive economic summary for Morocco from World Bank (GDP, inflation, unemployment, trade, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description does not disclose data freshness, scope boundaries, authentication requirements, or whether it includes forecasts. Minimal behavioral context beyond purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, efficient and front-loaded. Could include structure (e.g., bullet points of indicators) but concise overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool returns a 'comprehensive summary' but no details on format (structured vs narrative), update frequency, or error conditions. Given no annotations or output schema, description is incomplete for agent to assess suitability.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters in schema (schema coverage 100%). Description adds no parameter info, but with zero parameters, baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'Get', resource 'comprehensive economic summary for Morocco', and source 'World Bank' with example indicators. Distinguishes from siblings like get_world_bank_indicators which are more general and parameterized.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for a broad economic overview of Morocco, but no explicit guidance on when to use versus alternatives like get_world_bank_indicators or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_morocco_regionsB

Get all administrative regions of Morocco with metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoLanguage: 'ar' for Arabic, 'fr' for French, 'en' for Englishen

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description should disclose behavioral traits but only states 'with metadata' without clarifying if it's read-only, pagination, or rate limits. The basic nature implies a safe read, but lacks explicit transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no redundancy, appropriately sized for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with one parameter and no output schema, the minimal description is adequate but could benefit from clarifying what 'metadata' includes or the response structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully describes the single optional language parameter (100% coverage). The tool description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves all administrative regions of Morocco with metadata, distinguishing it from sibling tools like get_morocco_economic_summary which focus on economic data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus its many siblings. The description does not mention alternatives or contexts where this tool is preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_next_prayerA

Get the next upcoming prayer time for a Moroccan city

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the burden. It states the basic action but omits details like timezone handling, calculation method, or that it returns based on current date/time. This is acceptable for a simple tool but lacks full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no unnecessary words. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (1 param, no output schema), the description is mostly adequate but does not describe the return format or confirm that it returns a single time value. Missing output details reduce completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers the city parameter with 'City name', but the description adds 'Moroccan city', constraining the valid values. This adds meaningful context beyond the schema, raising the score above baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get', the resource 'next upcoming prayer time', and the scope 'for a Moroccan city'. It effectively distinguishes from siblings like get_prayer_times (full schedule) and get_weekly_prayer_times.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description does not mention prerequisites (e.g., valid city from list_prayer_cities) or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_prayer_timesB

Get Islamic prayer times for Moroccan cities (Fajr, Dhuhr, Asr, Maghrib, Isha)

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name (e.g., 'Rabat', 'Casablanca', 'Marrakech')
dateNoDate in YYYY-MM-DD format (default: today)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only states what the tool does but does not disclose data sources, update frequency, return format, or any side effects. For a daily prayer times tool, this is minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no unnecessary words. It efficiently communicates the core functionality. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with 2 parameters and no output schema or annotations. The description covers the basic purpose but lacks details about response structure, error handling, or data source. It is minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds marginal value by specifying 'Moroccan cities' as scope, but the city and date parameters are already documented in the schema. No additional semantic details are provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the verb 'get', the resource 'prayer times', and the scope 'Moroccan cities'. It lists the specific prayer times (Fajr, Dhuhr, Asr, Maghrib, Isha), which distinguishes it from sibling tools like get_next_prayer and get_weekly_prayer_times.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives. Sibling names imply differentiation (e.g., get_next_prayer for next prayer, get_weekly_prayer_times for weekly), but the description itself lacks any usage or exclusion context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_quotesB

Get stock quotes from Casablanca Stock Exchange (Bourse de Casablanca)

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolsNoStock symbols (e.g., ['ATW', 'IAM', 'BCP'])

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description should disclose behavioral traits. It does not mention whether quotes are real-time or delayed, any authentication requirements, or what happens if no symbols are provided. The description is too sparse to inform safe usage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence is concise and front-loaded with the essential purpose. However, the brevity sacrifices behavioral and usage details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description should explain what is returned (e.g., prices, dates, currency). It does not. Also, it fails to differentiate from overlapping siblings like get_market_summary. The description is incomplete for a practical agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (the 'symbols' parameter has a clear description with examples). The tool description adds the context of the Casablanca exchange, but this is already implied by the tool's domain. No additional parameter meaning is provided beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'stock quotes', and specifies the Casablanca Stock Exchange, which distinguishes it from siblings like get_bond_quotes and get_market_indices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as get_market_summary or get_market_indices. The description only states what it does, not the context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_treasury_billsB

Get treasury bills auction results from Bank Al-Maghrib

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoBill type (e.g., '13 weeks', '26 weeks', '52 weeks')
limitNoNumber of results

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully bears responsibility for behavioral disclosure. It only states it's a read operation ('Get'), but does not disclose potential traits like data freshness, authentication needs, rate limits, or what happens when no results are found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is concise and front-loaded. Every word is necessary and there is no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description should explain what the tool returns. It omits return structure or format, which could hinder an agent from correctly using the response. However, the tool is simple, and the parameter descriptions are adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the parameter descriptions add some meaning beyond names (e.g., examples for 'type'). However, the added value is limited; the descriptions are terse and do not clarify formatting or constraints beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'treasury bills auction results' from a specific source 'Bank Al-Maghrib'. It effectively conveys the tool's function, though it does not explicitly differentiate from sibling tools like get_bond_quotes, but the resource name is specific enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool vs alternatives. There is no mention of prerequisites, limitations, or scenarios where this tool is preferred over siblings such as get_interest_rates or get_bond_quotes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_weekly_prayer_timesA

Get prayer times for the next 7 days for a Moroccan city

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity name

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It only states the basic operation without disclosing return format, timezone handling, date boundaries (e.g., start from today or next day), or city matching behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no waste. The essential elements (action, resource, scope, constraint) are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 1-parameter tool, the description covers the core purpose and constraint. However, missing details like return format, timezone, and date range definition leave the agent uncertain about the exact output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, providing a baseline of 3. The description adds the 'Moroccan city' constraint, clarifying the allowed values beyond the schema's generic 'City name'. However, it omits listing supported cities or referencing list_prayer_cities.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get', the resource 'prayer times', the temporal scope 'next 7 days', and the geographic constraint 'Moroccan city'. This distinguishes it from siblings like get_prayer_times (general date) and get_next_prayer (single prayer).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like get_prayer_times for a specific date. The description does not provide usage context or mention sibling tools for broader or narrower queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_world_bank_indicatorsB

Get World Bank development indicators for Morocco (GDP, population, poverty, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault
indicatorYesIndicator code (e.g., 'NY.GDP.MKTP.CD' for GDP)
yearsNoYear range (e.g., '2010:2023') or 'latest'

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must fully convey behavioral traits. It only states what the tool does, but does not disclose read-only status, potential rate limits, error behavior, or data source reliability. This leaves critical gaps for safe invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that front-loads the action. It is concise, though it could include additional context without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is the sole source of information. It covers purpose and parameter context, but lacks details on return format, pagination, or data freshness, which would be expected for a data retrieval tool. It is minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with examples, but the description adds semantic meaning by specifying Morocco and listing indicator categories (GDP, population, poverty), which helps the agent choose appropriate codes. This goes beyond the schema's example code, moving above the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets World Bank development indicators for Morocco, listing examples (GDP, population, poverty). It specifies the resource and action, but does not explicitly differentiate from sibling tools like get_morocco_economic_summary or get_environmental_indicators, though the mention of World Bank provides some distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. With many sibling tools covering economic and environmental data, the lack of usage context is a significant gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_organizationsB

List all organizations publishing data on data.gov.ma

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description does not disclose any behavioral traits. No annotations are provided, and the description omits important details such as whether authentication is needed, whether the result is paginated, or if 'all' means all available or limited by the limit parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no unnecessary words. It is easy to read and front-loaded with the action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fails to clarify the scope of 'all organizations' given the limit parameter, and there is no output schema to explain the return format. For a list tool, more context about pagination or completeness is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single parameter, so the schema already documents its meaning. The description adds no additional semantic information beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' and clearly identifies the resource as 'organizations publishing data on data.gov.ma'. It distinguishes itself from sibling tools, which are mostly get_ and search_ tools for specific data types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like search_ or get_ tools. There is no mention of prerequisites, when not to use it, or how it fits with siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_prayer_citiesA

List all Moroccan cities available for prayer times

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavior. It states the tool lists cities, but does not mention details like alphabetical order, data source freshness, or whether the list is static. This is adequate for a simple list but leaves some ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, clear sentence that immediately conveys the tool's purpose. No wasted words or unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, no output schema), the description is nearly complete. It would benefit from mentioning the format of the returned list (e.g., city names only or with additional data), but it is sufficient for basic use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so no additional semantic explanation is needed. The schema coverage is trivially 100%. The description adds nothing about parameters, which is fine.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'all Moroccan cities available for prayer times'. It distinguishes this tool from siblings like 'get_prayer_times' which likely returns times for a specific city, but does not explicitly mention alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool vs siblings such as 'search_cities' or 'get_prayer_times'. The description assumes the agent will infer context, which is risky for a tool with 27 siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_by_tagB

Search datasets by tag on data.gov.ma

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYesTag to search for
limitNoNumber of results

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description lacks any disclosure of behavioral traits such as rate limits, pagination, ordering, or error handling. The description simply states the action without additional context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise but lacks structure. It does not waste words, but it is too minimal to provide sufficient guidance. The sentence earns its place but could be expanded slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is no output schema and no annotations, the description is adequate for a simple search tool. However, it fails to provide usage context or differentiate sufficiently from sibling tools, leaving some gaps for optimal agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with both parameters having descriptions. The tool description adds no extra meaning beyond the schema, so it meets the baseline. However, it doesn't explain search behavior (e.g., exact vs partial match), which could be added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'search', the resource 'datasets', and the domain 'data.gov.ma'. It effectively distinguishes this tool from siblings like 'search_cities' and 'search_datasets' by specifying the filtering mechanism (by tag).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'search_datasets' or 'get_dataset'. The description does not clarify the context or prerequisites for using this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_citiesC

Search for Moroccan cities by name or region

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoSearch query
regionNoFilter by region

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must disclose behavior. It only says 'search for cities' but doesn't mention whether it returns limited results, pagination, ordering, or what happens if no query is given. Read-only nature is implied but not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, no wasted words, clearly conveys the core function. Highly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description should hint at result structure (e.g., list of city names, details). It does not, leaving the agent uninformed about return format. Incomplete for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with schema descriptions 'Search query' and 'Filter by region'. The description adds 'by name or region' which aligns but doesn't provide nuance like region format or that 'query' is for city name. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches for Moroccan cities by name or region (specific verb+resource). However, it does not explicitly differentiate from siblings like 'get_city_coordinates' or 'list_prayer_cities', so it loses a point.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., get_city_coordinates for coordinates, list_prayer_cities for prayer cities). No when-not-to-use or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_datasetsB

Search for datasets on Morocco's national open data portal (data.gov.ma). Supports Arabic, French, and English queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (supports Arabic, French, English)
limitNoNumber of results (default: 10)
organizationNoFilter by organization ID
formatNoFilter by resource format (CSV, JSON, XML, etc.)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and description does not disclose behavioral traits such as read-only nature, rate limits, authentication requirements, or result format. Minimal transparency beyond basic function.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. First sentence states purpose, second adds language support. Highly concise and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Description is adequate for a simple search tool but lacks details about return values or pagination, which is not covered by an output schema. Could be more complete for a 4-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema provides 100% coverage with descriptions for all parameters. The description adds no extra semantic value beyond what the schema already states, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool searches for datasets on Morocco's national open data portal, with support for multiple languages. Distinguishes from sibling search tools (e.g., search_cities) by specifying the resource and portal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives like search_by_tag or get_dataset. Does not specify prerequisites or context for effective use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_knowledge_graphB

Search the Morocco knowledge graph for entities and relationships

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query
typeNoEntity type filter (organization, person, location, event)

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden for behavioral disclosure. It only mentions searching for entities/relationships but omits details like scope, limitations, or whether it modifies data. This is insufficient for an agent to understand side effects or constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence, with no wasted words. It could be slightly expanded for clarity, but it remains efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, so the description should explain return format or behavior. It does not mention what the search returns (e.g., list of entities, relationships, confidence scores), leaving the agent guessing. This is incomplete for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%; each parameter has a brief description. The tool description adds domain-specific context ('Morocco knowledge graph', 'entities and relationships'), which enhances understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Search' and the resource 'Morocco knowledge graph for entities and relationships', which distinguishes it from sibling data retrieval tools like 'get_city_coordinates' or 'search_cities'. However, it could be more specific about what constitutes entities and relationships.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as 'search_datasets' or 'search_cities'. The description only states what it does without any context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 28 tool updatesv1.0.0
    • First observedget_bond_quotes
    • First observedget_city_coordinates
    • First observedget_climate_data
    • First observedget_company_info
    • First observedget_data_sources
    • First observedget_dataset
    • First observedget_environmental_indicators
    • First observedget_exchange_rates
    • First observedget_humanitarian_datasets
    • First observedget_inflation_data
    • First observedget_interest_rates
    • First observedget_market_indices
    • First observedget_market_summary
    • First observedget_money_supply
    • First observedget_morocco_economic_summary
    • First observedget_morocco_regions
    • First observedget_next_prayer
    • First observedget_prayer_times
    • First observedget_stock_quotes
    • First observedget_treasury_bills
    • First observedget_weekly_prayer_times
    • First observedget_world_bank_indicators
    • First observedlist_organizations
    • First observedlist_prayer_cities
    • First observedsearch_by_tag
    • First observedsearch_cities
    • First observedsearch_datasets
    • First observedsearch_knowledge_graph

TDQS

B3.2/5.0
Disambiguation3/5

Some tools overlap, e.g., multiple prayer time tools (get_next_prayer, get_prayer_times, get_weekly_prayer_times) and economic summaries (get_morocco_economic_summary vs get_world_bank_indicators). However, descriptions generally clarify distinctions.

Naming Consistency4/5

Tools follow a mostly consistent verb_noun pattern with 'get_', 'search_', and 'list_' prefixes. The few mixed verbs (get vs search vs list) are predictable but not uniform.

Tool Count3/5

28 tools is on the higher end for an open data MCP. The scope is broad (finance, religion, climate, etc.), which justifies the count, but some domains could be consolidated.

Completeness3/5

Covers diverse domains but lacks depth in each. Missing CRUD operations (expected for read-only) and missing some plausible tools like order book or trade history for finance, or category browsing for datasets.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for the Moroccan Open Data portal (data.gov.ma) enabling search and retrieval of datasets, resources, organizations, and groups via CKAN API.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kcbdev/morocco-open-data-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server