mcp-iati
OfficialMCP IATI
Примечание: локальная концептуальная демонстрация. Отправная точка для будущего плагина mcp-server, который обрабатывает файлы, следующие стандарту IATI (виды деятельности и организации): документированные Python-инструменты с plugin_info/instructions/sample_questions, запасной инструмент no_tool_disponible и модуль инструментов, отдельный от регистрационной обвязки.
Он определяет инструменты для изучения видов деятельности, организаций, стран-получателей, секторов и транзакций из настроенного IATI XML.
Доступные инструменты:
search_activities(text, limit=10): поиск видов деятельности по названию.list_activity_statuses(): список доступных статусов деятельности и их количества.list_reporting_organisations(): список отчитывающихся организаций и количества связанных с ними видов деятельности.list_recipient_countries(): список стран-получателей и количества видов деятельности.filter_activities_by_country(country, limit=10): фильтрация видов деятельности по коду или названию страны-получателя.list_sectors(limit=100): список кодов секторов, названий и словарей.activity_summary(iati_identifier): показать основную информацию и финансовые итоги по одному виду деятельности.activity_transactions(iati_identifier, limit=50): список транзакций вида деятельности в хронологическом порядке.transaction_totals_by_year(year_from=None, year_to=None): группировка итогов по обязательствам и выплатам по году, типу транзакции и валюте, с игнорированием недействительных дат/значений и использованием валюты по умолчанию для вида деятельности, если у транзакции отсутствует валюта.transaction_totals_by_organisation(limit=50): группировка обязательств и выплат по отчитывающимся организациям, с разделением типов транзакций и валют и пояснением, что отчитывающаяся организация является публикатором данных о деятельности, но не обязательно финансирующим или исполняющим органом.transaction_totals_by_country(transaction_type="2", currency=None, limit=50): группировка обязательств и выплат по странам-получателям, с разделением типов транзакций и валют и понятной резервной меткой, когда данные о стране отсутствуют.transaction_totals_by_sector(transaction_type="2", currency=None, vocabulary=None, limit=50): распределение итогов по обязательствам или выплатам по секторам с использованием опубликованных процентных долей, с разделением словарей и валют и добавлением категорииUnallocated sector, когда процентные доли не составляют в сумме 100%.top_activities_by_amount(transaction_type="2", currency=None, limit=10): список видов деятельности с наибольшими итогами по обязательствам или выплатам, ранжированный отдельно для каждой валюты.define_term(term): объяснение термина IATI с помощью центрального глоссария.
Руководящий принцип: эти инструменты используют только общие поля стандарта IATI (идентификаторы, статусы, организации, страны-получатели, секторы и транзакции), но никогда не используют специфичную для Бразилии или IADB логику — они должны одинаково хорошо работать с любым другим IATI XML (см. переменные конфигурации ниже).
Откуда берутся данные
XML-файлы — это официальные публикации IATI от Inter-American Development Bank, не версионируемые в этом репозитории: они загружаются по требованию с собственного хостинга банка по адресу webimages.iadb.org/iati (те же URL-адреса, которые индексирует реестр IATI; IADB обновляет их ежемесячно) в каталог пользовательских данных (~/.local/share/mcp-iati/xml/ в Linux, через platformdirs) и обновляются по истечении настроенного TTL. .gitignore на всякий случай исключает любые *.xml.
Related MCP server: XRPL Data MCP
Как обрабатывается XML
mcp_iati/activities/data.pyпреобразует настроенный XML в плоские CSV-файлы и переиспользует кэш, привязанный к источнику, пока не истечёт его TTL, с помощьюokfn_iati.IatiMultiCsvConverter().xml_to_csv_folder(...)(той же библиотеки, которуюckanext-iati-generatorиспользует в продакшене, но в направлении XML -> CSV, а не CSV -> XML).Инструменты (
mcp_iati/activities/queries.py) запрашивают эти CSV с помощьюpandas, а не XML — это позволяет избежать повторного разбора многомегабайтного файла при каждом вызове.По умолчанию используется
iadb-Brazil.xml. Чтобы использовать другой официальный страновой файл IADB, удалённый URL или локальный файл, не меняя код:# another IADB country file from https://webimages.iadb.org/iati/ export MCP_IATI_SAMPLE=iadb-Argentina.xml # or any remote IATI XML export MCP_IATI_XML_URL=https://example.org/activities.xml # or any local file (downloads nothing) export MCP_IATI_XML_PATH=/path/to/another-iati-file.xml
Конфигурация
Конфигурация читается один раз при запуске процесса. После изменения источника, каталога данных или длительности кэша перезапустите сервер.
Переменная | Описание | По умолчанию |
| Путь к локальному XML. Имеет приоритет и не выполняет загрузку. | Не задано. |
| HTTP(S) URL удалённого XML, используется, когда локальный путь не задан. | Не задано. |
| Название официального странового файла IADB (с https://webimages.iadb.org/iati/), используется, когда не заданы ни путь, ни URL. |
|
| Каталог для загруженных XML-файлов и созданных CSV-файлов. | Каталог пользовательских данных, предоставляемый |
| Настраиваемая длительность кэша в секундах; должна быть больше нуля. |
|
| Как долго продолжать обслуживать устаревший CSV-кэш после неудачного обновления перед повторной попыткой конвертации; должно быть больше нуля. |
|
Загруженные XML-файлы и конвертированные папки CSV переиспользуются, пока они находятся в пределах этого TTL. Когда он истекает, XML загружается снова, а CSV-файлы пересоздаются. CSV-кэши используют ключ, производный от настроенного источника, поэтому Аргентина, Бразилия и пользовательские URL никогда не используют одни и те же конвертированные файлы. Если удалённое обновление не удалось и существует предыдущий XML, эта устаревшая копия используется с предупреждением во время выполнения, а не делает инструменты недоступными.
Приоритет источника:
MCP_IATI_XML_PATH.MCP_IATI_XML_URL.MCP_IATI_SAMPLE.Образец по умолчанию
iadb-Brazil.xml.
Пример:
export MCP_IATI_XML_URL=https://example.org/iadb-Argentina.xml
export MCP_IATI_DATA_DIR=/var/cache/mcp-iati
export MCP_IATI_CACHE_TTL_SECONDS=2592000
uv run mcp-serverТаблицы CSV, используемые плагином
Таблица | Столбцы, используемые в данный момент | Связь |
|
|
|
|
|
|
|
|
|
Все три CSV-файла загружаются как общие pandas DataFrames. Повторные вызовы инструментов переиспользуют те же экземпляры и не загружают XML, не запускают конвертацию и не читают CSV-файлы заново.
Логика подготовки данных и конвертации отделена от логики запросов. Дополнительные CSV-таблицы можно добавлять через DATAFRAME_SPECS.
Разработка
# Install dependencies (mcp-server from git, okfn-iati from PyPI;
# the dev extra brings ruff and pytest)
uv sync --extra dev
# Lint
uv run ruff check srcДобавление этого пакета в локальный mcp-server
Из папки mcp-server/ установите этот пакет в ту же виртуальную среду:
uv pip install -e ../mcp-iati
uv run mcp-serverИнструменты становятся доступными с префиксом mcp_iati_.
Глоссарий IATI
Описания инструментов и инструкции плагина используют общий глоссарий, определённый в src/mcp_iati/glossary.py. Его цель — чтобы модель последовательно интерпретировала термины стандарта и объясняла различия, которые часто вызывают неоднозначность, особенно между отчитывающимися, финансирующими и исполняющими организациями, а также между обязательством, выплатой и расходом. Инструмент define_term предоставляет к нему прямой доступ, поэтому на вопросы вроде «что означает 'disbursement'?» ответ даётся из глоссария (со стандартом IATI в качестве указанного источника), а не из собственных знаний модели.
Глоссарий охватывает весь стандарт IATI 2.03 для видов деятельности в том виде, в котором он смоделирован библиотекой okfn/okfn_iati (её перечисления отражают кодовые списки IATI, а её конвертер преобразует каждый элемент в CSV), сгруппирован по следующим областям:
Область | Термины |
Идентификация и жизненный цикл | IATI activity, IATI identifier, activity status, activity date, description, hierarchy, related activity, activity scope, humanitarian flag |
Организации | reporting organisation, participating organisation, organisation role, organisation type, provider organisation, receiver organisation, contact information |
Финансовые данные | transaction, transaction type, transaction value, commitment, disbursement, expenditure, budget, planned disbursement, default currency, country budget item |
Классификации помощи | aid type, finance type, flow type, tied status, collaboration type, disbursement channel, policy marker |
Секторы и география | sector, recipient country or region, location |
Результаты и мониторинг | result, indicator, indicator period |
Документация и сквозные темы | document link, condition, vocabulary, codelist, narrative |
При добавлении нового инструмента используйте определения из центрального модуля, а не дублируйте их в его docstring (через glossary_text(...) для соответствующих терминов). Когда нижележащая библиотека начнёт предоставлять новый элемент IATI, добавьте его термин в глоссарий в соответствующую группу.
Тесты
uv run pytestТесты работают офлайн: tests/conftest.py предварительно заполняет кэш данных синтетическими DataFrame и задаёт MCP_IATI_XML_PATH, поэтому ничего не загружается. Они покрывают:
что глоссарий включает минимальный набор понятий и что описания инструментов раскрывают модели соответствующие термины;
регрессия запросов (таблицы, источники, пустые случаи);
контракт на необработанные данные (
test_raw_data_in_ai_response.py): шлюз отправляет ИИ только текст ответа, поэтому каждый инструмент, возвращающий таблицу, должен встраивать её дословно в этот текст (делается с помощьюhelpers.text_result). При добавлении нового инструмента с таблицей добавьте его в списокDATA_TOOLSв этом тесте.
На GitHub, .github/workflows/python-lint.yml запускает ruff + pytest при
каждом пуше.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA read-only MCP server over the Cassini-Huygens mission dataset exposing tools for querying activity data such as listing, searching, counting, aggregating, and timeline analysis.1MIT
- FlicenseNot gradedqualityDmaintenanceIntegrates multiple XRPL data sources including LOS, Validator History Service, XRPL JSON-RPC, and XRPLMeta to provide comprehensive querying of XRPL network data, accounts, transactions, tokens, validators, and more via MCP tools.
- AlicenseNot gradedqualityCmaintenanceEnables querying IETF documents, RFCs, working groups, and persons from the IETF Datatracker via MCP tools.7MIT
- AlicenseNot gradedqualityAmaintenanceSearch and query government open-data portals (Socrata SODA API) via MCP.2812Apache 2.0
Related MCP Connectors
UN FAOSTAT global food & agriculture statistics over a local SQLite mirror, via MCP.
World Bank MCP — wraps the World Bank Data API v2 (free, no auth)
USAspending MCP — Federal spending data from USAspending.gov API
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/okfn/mcp-iati'
If you have feedback or need assistance with the MCP directory API, please join our Discord server