CiteWire
Attribution-first MCP infrastructure for news and research discovery.
CiteWire дает агентам структурированный, только чтение доступ к метаданным новостей и исследований, сохраняя кредит и трафик оригинального издателя. Это может экспонировать совместимую новостную платформу как типизированные MCP-инструменты, запрашивать опциональные публичные API провайдеров или делать и то, и другое на одном сервере.
Community-издание полезно само по себе. Оно включает ядро MCP, транспорты stdio и HTTP, общий адаптер платформы и каждый адаптер провайдера в этом репозитории под лицензией MIT. Коммерческое направление продукта — добавочное и сфокусировано на управляемых операциях, персонализации, рабочих процессах, сотрудничестве, сохраненной истории и поддержке. См. [Product tiers].
Для чего нужен CiteWire
-
Операторы новостных платформ могут экспонировать совместимый read API через
news.list,news.get,news.topicsиnews.about. -
Исследователи и создатели агентов могут включать только те публичные новостные и исследовательские провайдеры, которые хотят запросить.
-
Самостоятельно размещающие могут запускать тот же сервер через stdio, безсостояние HTTP или внутри функции Node serverless.
-
Поставщики-участники могут добавить узконаправленный адаптер без внедрения зависимости во время выполнения.
CiteWire — это не сервис полнотекстового инфогенератора, краулер, издатель, редакционная система или сервис проверки прав. Он не хранит и не перепубликовывает тексты статей. Доступность провайдера не заменяет необходимость ознакомиться с текущими условиями использования у указанного провайдера.
Быстрый старт
Требования: Node.js 18 или новее. Community — пакет Node в формате ESM; он не предоставляет точку входа CommonJS.
Создайте citewire.config.json с включенным одним провайдером:
{
"providers": {
"openalex": { "enabled": true }
}
}
Запустите сервер через stdio:
npx -y citewire --config citewire.config.json
stdio — транспорт по умолчанию и обычный выбор, когда MCP-клиент запускает citewire как локальный процесс.
Конфигурация MCP-клиента
Используйте абсолютный путь к конфигурации, потому что клиенты не всегда запускаются из каталога проекта:
{
"mcpServers": {
"citewire": {
"command": "npx",
"args": [
"-y",
"citewire",
"--config",
"/absolute/path/to/citewire.config.json"
]
}
}
}
HTTP-подключение
Запустите безсостояние HTTP-транспорт на порту 8722:
npx -y citewire --config citewire.config.json --http 8722
Локальная точка доступа принимает JSON-RPC через POST /. Она не поддерживает сессии или поток событий.
Два способа использования
1. Обернуть совместимую новостную платформу
Объявите платформу с display name, URL сайта и базой API чтения:
{
"platform": {
"name": "Example Industry News",
"siteUrl": "https://news.example",
"apiBase": "https://news.example/api/v1/news"
}
}
Эта конфигурация экспонирует четыре инструмента:
| Инструмент | Назначение |
|---|---|
| news.list | Список элементов, отсортированных по новизне, с опциональными фильтрами по теме, отрасли, тексту, окну дат и пагинации. |
| news.get | Получить один элемент по slug, включая атрибуцию и связанные материалы, возвращаемые платформой. |
| news.topics | Прочитать активную таксономию тем платформы. |
| news.about | Прочитать статические данные платформы и политику атрибуции. |
Заданная HTTP-поверхность описана в контракте платформенного read-API: [platform read-API contract].
2. Включение инструментов публичных провайдеров
Адаптеры провайдеров включены в Community и отключены по умолчанию. Провайдер становится активным только тогда, когда его запись конфигурации установлена в enabled: true.
{
"providers": {
"gdelt-doc": { "enabled": true },
"arxiv": { "enabled": true },
"crossref": {
"enabled": true,
"mailto": "operator@example.com"
}
}
}
Crossref требует контактный адрес электронной почты развертывающего, чтобы запросы могли идентифицировать оператора в их "полировать пул". CiteWire отправляет этот адрес только в параметре mailto и в User-Agent в запросе к Crossref. Не копируйте приведенный пример адреса.
Текущие адаптеры:
| Провайдер | Инструменты | Фокус |
|---|---|---|
| GDELT DOC 2.0 | gdelt.search | Метаданные мировых новостных статей |
| GDELT Context 2.0 | gdelt.context | Контекст на уровне фрагментов вокруг термина |
| arXiv | arxiv.search | Метаданные препринтов |
| OpenAlex | openalex.search | Научные работы, авторы и площадки |
| Crossref | crossref.search | Метadанные регистрации DOI |
| Semantic Scholar | semanticscholar.search | Статьи и граф авторов |
| Europe PMC | europepmc.search | Метаданные литературы по бионауке |
| dblp | dblp.search | Записи библиографий по компьютерным наукам |
| Hacker News | hackernews.top, hackernews.item | Истории и элементы из официального API |
| DEV | devto.search | Публичные метаданные статей DEV |
Сначала прочитайте [Providers], прежде чем включать какой-либо адаптер. Этот документ регистрирует конечную точку, документацию, бесплатный доступ и известные ограничители для каждого адаптера. Документация самого провайдера остается источником истины.
Поведение конфигурации
platform— необязателен.providers— необязателен.- Провайдер, отсутствующий в конфигурации, остается отключенным.
- Пустая конфигурация действительна и не экспонирует никаких инструментов.
- Неверная конфигурация сбоит на старте с указанием поля в сообщении об ошибке.
tools/list— авторитетный список инструментов для разворачивания, потому что включенные инструменты зависят от конфигурации развёртывания.
Развёртывание может сочетать инструменты платформы и провайдеров:
{
"platform": {
"name": "Example Industry News",
"siteUrl": "https://news.example",
"apiBase": "https://news.example/api/v1/news"
},
"providers": {
"openalex": { "enabled": true }
}
}
Опциональная Foundation политики сообщества
CiteWire может экспонировать локальную, только читаемую foundation для политики источников, оценки прав и теневого включения:
{
"community": {
"enabled": true,
"classifierMode": "shadow",
"thresholds": {
"adjacent_min": 0.5,
"standard_min": 0.6
}
}
}
Каждый встроенный источник по умолчанию отключен. Эта настройка не выполняет сетевых запросов, не загружает учетные данные и не может публиковать. Проверки прав на основе учетных данных принимают неразборчивые ссылки на секретные менеджеры в памяти, но никогда не возвращают их. Классификатор принудительно переходит в режим shadow и всегда сообщает publishable: false до наличия отдельно рассмотренной редакционной системы и набора для оценки.
См. [Source registry and rights] для проверки в рантайме, политики fail-closed, канонических инструментов MCP и ресурсов и текущих ограничений.
Границы проектирования
- MIT и нулевая зависимость. Пакет использует встроенные в Node средства и не имеет зависимостей во время выполнения или разработки.
- Node ESM. Community поддерживает Node.js 18 и новее через ESM. Не обеспечивает совместимость с CommonJS и не имеет сборки для CommonJS.
- Read only. Включенные инструменты запрашивают поверхности чтения платформы и провайдера.
- Stateless. Сервер Community не имеет учётных записей, сессий, сохранённых поисков или сохраненной истории.
- Attribution first. Результаты сохраняют метаданные источника и ссылки, предоставленные upstream-платформой или провайдером.
- Config driven. Развёртыватель определяет, какие инструменты присутствуют. Ничто не включается само по себе.
- Storage free. Ядро не сохраняет ответы провайдеров или исходный контент.
Эти рамки поддерживаются политикой управления проектом: [governance policy].
Экосистема и документация по продукту
- [Product tiers] определяет постоянную ценность Community и добавочную коммерческую границу.
- [Distribution] содержит точную регистр и каталог чек-листов. Невыполненные подачи помечаются
PENDING. - [Governance] объясняет решения, ответственность провайдеров, совместимость и лицензионные вопросы.
- [Providers] документирует каждого исходного провайдера.
- [Platform contract] определяет совместимый read API новостей.
- [Contributing] освещает настройку, тесты, добавления провайдеров и ожидания к pull request.
- [Releasing] определяет контролируемые релизы пакета и реестра.
- [Support], [Security], и [Code of Conduct] задают каналы для сообществ.
Истоки проекта
Citewire был создан на основе его первого развёртывания для [Karaya Group Industry News]. Публичный контракт платформы нейтрален и может обернуть любой совместимый read API.
Внесение вклада
Запустите тестовый набор с npm test. Установка не требуется. См. [CONTRIBUTING.md] перед предложением провайдера или изменения в публичном контракте.
Лицензия
Community распространяется по MIT-лицензии. См. [LICENSE].