LegiScan MCP Server
LegiScan MCP Server
Сервер протокола контекста модели (MCP), который предоставляет терминальным агентам структурированный доступ к API LegiScan для получения законодательных данных всех 50 штатов США и Конгресса.
Создан для исследовательских рабочих процессов, где вы направляете агента (Codex, Claude Code, Claude Desktop и т. д.) для быстрого сбора истории законопроектов, контекста спонсоров и протоколов голосования.
Функции
10 оптимизированных инструментов MCP, настроенных для рабочих процессов законодательных исследований
Композитные инструменты, которые сворачивают многоэтапные исследовательские процессы в вызовы одного инструмента MCP
Пакетная обработка по запросу и кэширование поиска для повторных запросов по законопроектам и поименным голосованиям
Полные определения типов TypeScript для всех ответов API
Нормализация номеров законопроектов (поддерживает форматы AB 858, AB858, AB-858)
Механизмы проверки ввода для кодов штатов, запросов имен законодателей и больших пакетов законопроектов
Related MCP server: civic-awareness-mcp
Установка
Из npm (рекомендуется)
npm install -g legiscan-mcp-serverИз исходного кода
git clone https://github.com/sh-patterson/legiscan-mcp.git
cd legiscan-mcp
npm install
npm run buildНастройка
1. Получите API-ключ LegiScan
Создайте бесплатную учетную запись на LegiScan
Зарегистрируйтесь для доступа к API на странице https://legiscan.com/legiscan
Скопируйте свой API-ключ
2. Добавьте в свой агент с поддержкой MCP
Добавьте этот сервер в любой MCP-хост, который использует ваш терминальный агент.
Пути к конфигурации Claude Desktop:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Для других клиентов MCP (Codex CLI, Claude Code и т. д.) добавьте ту же запись mcpServers.legiscan в файл конфигурации MCP этого клиента.
Использование npx (рекомендуется)
{
"mcpServers": {
"legiscan": {
"command": "npx",
"args": ["-y", "legiscan-mcp-server"],
"env": {
"LEGISCAN_API_KEY": "your_api_key_here"
}
}
}
}Использование локальной установки
{
"mcpServers": {
"legiscan": {
"command": "node",
"args": ["/path/to/legiscan-mcp-server/dist/index.js"],
"env": {
"LEGISCAN_API_KEY": "your_api_key_here"
}
}
}
}Доступные инструменты
Композитные инструменты (исследования высокого уровня)
Инструмент | Описание |
| Поиск people_id законодателя по имени. Поддерживает частичное совпадение. |
| Получение информации о том, как законодатель голосовал по нескольким законопроектам за один вызов. |
| Получение только тех законопроектов, где законодатель является основным автором (не соавтором). |
Законопроекты
Инструмент | Описание |
| Получение подробной информации о законопроекте (спонсоры, история, голосования, тексты) |
| Поиск законопроекта по номеру (поддерживает AB 858, AB858, AB-858, A.B. 858). Лучший вариант для точного поиска. |
| Получение деталей голосования с индивидуальными голосами законодателей |
Люди
Инструмент | Описание |
| Получение информации о законодателе с ID сторонних сервисов (VoteSmart, OpenSecrets и т. д.) |
| Получение списка всех законодателей, активных в сессии |
Поиск
Инструмент | Описание |
| Полнотекстовый поиск по законодательству. Принимает варианты номеров законопроектов, такие как AB858, но для точных совпадений используйте |
Сессии
Инструмент | Описание |
| Список доступных законодательных сессий по штатам |
Рабочий процесс исследователя (терминальный агент)
1. Начните с ограниченного запроса
Дайте агенту цель, штат, временные рамки и формат вывода.
Пример промпта:
Use the LegiScan MCP tools to find major California housing bills in the current session.
Return: bill number, title, latest action date, top sponsors, and whether there was a close roll-call vote (margin <= 5).2. Попросите агента выполнить последовательность инструментов
Для получения качественных результатов попросите агента следовать этому порядку:
legiscan_get_session_listдля определения правильной сессии.legiscan_searchилиlegiscan_find_bill_by_numberдля поиска целевых законопроектов.legiscan_get_billдля получения ссылок на спонсоров/историю/голосования.legiscan_get_roll_callдля получения деталей индивидуального голосования.legiscan_get_personтолько тогда, когда требуется расширенная информация о законодателе.
Если вы начинаете с legiscan_find_legislator, продолжайте передавать возвращенный session.session_id или тот же state в последующие рабочие процессы, чтобы результаты оставались в рамках нужного законодательного органа и периода времени.
3. Повторно используйте композитные инструменты для аналитических рабочих процессов
Они сокращают количество вызовов инструментов и упрощают инструкции для вашего агента:
legiscan_find_legislator: получениеpeople_idиз запроса по имени.legiscan_get_primary_authored: отделение законопроектов, где законодатель является основным автором, от законопроектов, где он соавтор.legiscan_get_legislator_votes: получение позиций голосования по многим законопроектам за один запрос.
Шаблоны промптов
А) Исследование оппозиции по одному законодателю
Use LegiScan MCP for Texas.
1) Find legislator "Jane Smith".
2) List all primary-authored bills in the current session.
3) For these bills, summarize topic area and latest status.
4) Then check votes on SB 12, HB 301, and SB 455, and show how the legislator voted.Б) Сводка по отслеживанию законопроектов для конкретной области
Use LegiScan MCP to track "climate resilience" bills in New York.
Focus on current session only.
Return top 15 bills by relevance with bill number, title, last action, sponsor party, and any recorded roll calls.В) Рабочий процесс поддержки оценочных карт (scorecards)
For California session 2172, resolve bill numbers AB 858, SB 525, SB 616, SB 399.
For each bill, fetch details and any roll calls.
Then report vote positions for people_id values 21719, 23214, and 25359.
Output as a table suitable for CSV export.Упрощение рабочего процесса
Композитные инструменты значительно сокращают количество обращений «агент-инструмент» для типичных рабочих процессов:
Рабочий процесс | Ручные шаги MCP | С композитными инструментами |
Получение голосов 1 законодателя по 10 законопроектам | Поиск законодателя → поиск/разрешение законопроектов → проверка каждого законопроекта → проверка каждого голосования | 1 вызов инструмента после получения |
Фильтрация основных авторств из 150 спонсируемых законопроектов | Список спонсируемых → получение каждого законопроекта → проверка спонсоров | 1 вызов инструмента, опционально с ограничением по |
Поиск законодателя по имени | Обнаружение сессии → поиск людей в сессии → ручное сопоставление | 1 вызов инструмента |
Советы по исследованию
Коды штатов проверяются как двухбуквенные строки и автоматически переводятся в верхний регистр (
ca→CA). Неверные коды, такие какZZ, проходят локальную проверку, но возвращают ошибку API от LegiScan.Всегда указывайте штат и сессию в своем промпте, чтобы уменьшить количество неоднозначных результатов.
Попросите агента отображать
bill_id,roll_call_idиpeople_idв промежуточном выводе, чтобы вы могли проверить прослеживаемость.Для поиска законодателя укажите как минимум имя и фамилию (ввод имени должен содержать не менее 2 символов).
legiscan_get_primary_authoredможет возвращать все доступные сессии, но передачаstateилиsession_idпозволяет сохранить результаты в рамках нужного законодательного органа и периода времени.legiscan_get_legislator_votesпринимает до 100bill_idsза запрос; разбивайте большие задачи на части.legiscan_searchповторяет компактные запросы номеров законопроектов, такие какAB858, используя канонический формат с пробелами. Для точного разрешения законопроекта предпочтительнее использоватьlegiscan_find_bill_by_number.Запрашивайте финальные результаты в виде таблицы или CSV, если планируете дальнейший анализ.
Разработка
npm run build # Compile TypeScript
npm run typecheck # Type-check src + tests
npm test # Run deterministic unit tests (no API key)
npm run test:e2e # Run real-world workflow tests (skips cleanly without API key)
npm run test:live # Run live API integration tests (requires API key)
npm run test:coverage # Run unit tests with coverage
npm run lint # Check for lint errors
npm run format # Format code with PrettierРежимы тестирования
npm test/npm run test:unit: Быстрые детерминированные тесты с имитацией сетевых вызовов.npm run test:e2e: Тесты исследовательских рабочих процессов, основанные на реальных задачах законодательного анализа. Пропускаются, еслиLEGISCAN_API_KEYнедоступен.npm run test:live: Тесты интеграции с реальным API LegiScan. ТребуетсяLEGISCAN_API_KEY.
Лимиты API
Бесплатные публичные API-ключи имеют лимит 30 000 запросов в месяц.
Композитные инструменты пакетно обрабатывают запросы (максимум 10 параллельно) и кэшируют повторные поиски в рамках одного запроса, чтобы избежать ненужного дублирования.
Композитные инструменты снижают трение в рабочем процессе MCP, но использование API LegiScan все равно масштабируется в зависимости от количества отдельных законопроектов и голосований, которые вы проверяете.
Docker
Соберите образ контейнера локально:
docker build -t legiscan-mcp .Запустите его с вашим API-ключом, предоставленным во время выполнения:
docker run --rm -i \
-e LEGISCAN_API_KEY=your-api-key-here \
legiscan-mcpРелизы
Проверки Glama ожидают GitHub-релиз. После слияния ваших следующих изменений в репозиторий создайте и опубликуйте тег, например v1.0.0, из GitHub или с помощью:
git tag v1.0.0
git push origin v1.0.0Docker
Соберите образ контейнера локально:
docker build -t legiscan-mcp .Запустите его с вашим API-ключом, предоставленным во время выполнения:
docker run --rm -i \
-e LEGISCAN_API_KEY=your-api-key-here \
legiscan-mcpРелизы
Проверки Glama ожидают GitHub-релиз. Создайте и опубликуйте тег, например v1.0.0, после отправки изменений.
Лицензия
MIT — подробности см. в LICENSE.
Available Tools
10 toolslegiscan_find_bill_by_numberA
Find a bill by its number within a state's current session or specific session. Handles format variations (AB 858, AB858, AB-858). Returns bill summary if found, null if not.
Inputs: bill_number (required), state, session_id.
legiscan_find_legislatorA
Find a legislator's people_id by searching their name. Useful as a first step before other queries. Supports partial name matching.
Inputs: name (required), state (required), session_id.
legiscan_get_billA
Get detailed bill information including sponsors, full history, votes, texts, amendments, and supplements. This is the primary tool for bill research.
Inputs: bill_id (required).
legiscan_get_legislator_votesA
Get how a legislator voted on specific bills. Use find_legislator first to get people_id from a name. Returns vote positions (Yea/Nay/NV/Absent) for each bill with roll call details.
Inputs: bill_ids (required), people_id (required), chamber.
legiscan_get_personA
Get legislator information including party, role, district, and third-party IDs (VoteSmart, OpenSecrets, Ballotpedia, FollowTheMoney).
Inputs: people_id (required).
legiscan_get_primary_authoredA
Get only bills where a legislator is the PRIMARY author, not co-sponsor. Use find_legislator first to get people_id from a name. Filters out co-sponsored bills automatically.
Inputs: people_id (required), state, session_id.
legiscan_get_roll_callA
Get roll call vote details including individual legislator votes. Get roll_call_id by calling get_bill first.
Inputs: roll_call_id (required).
legiscan_get_session_listA
Get list of available legislative sessions. Returns sessions with session_id, years, and state info. Use session_id for subsequent bill lookups.
Inputs: state.
legiscan_get_session_peopleA
Get all legislators active in a legislative session. Returns list of people with their roles, parties, and districts.
Inputs: session_id (required).
legiscan_searchA
Full-text search across bill texts. Returns 50 results per page with relevance scores, bill summaries, and URLs. Use for interactive searches.
Inputs: query (required), page, year, state, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Each tool targets a distinct resource or action (bills, legislators, sessions, votes, search) with clear boundaries. Even related tools like get_legislator_votes and get_roll_call serve different purposes (individual legislator vs. specific roll call).
All tool names follow a consistent 'legiscan_verb_noun' pattern using lowercase with underscores. Verbs are limited to 'find', 'get', and 'search', making the set predictable.
10 tools is well-scoped for a legislative tracking server. Each tool addresses a core need without unnecessary duplication or omission.
The tool surface covers the primary lifecycle for legislative data: discovering sessions, searching bills, retrieving details, and accessing legislator info and votes. No obvious gaps for a read-only MCP server.
Maintenance
Related MCP Connectors
Federal and 50-state legislative data for AI: bills, text, votes, members, and committees.
Search bills and speaker-attributed hearing transcripts across all 50 US state legislatures.
Bills, hearings, votes and legislators for all 50 US states, DC and Congress, from official sources.
Search bills, legislators, committees, and events across all 50 US states, DC, and 5 US territories.
Related MCP Servers
- AlicenseAqualityCmaintenanceSearch bills and speaker-attributed hearing transcripts across all 50 US state legislatures.71MIT
- AlicenseAqualityDmaintenanceProvides tools to search and retrieve US federal and state legislative data, including bills, votes, campaign contributions, and legislator information, with provenance tracking.81MIT
- AlicenseNot gradedqualityBmaintenanceAccess U.S. state legislative data including bills, legislators, and votes across all 50 states via the OpenStates API.321 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables querying legislative data from the LegiScan API, including bills and votes, via natural language through an MCP gateway.137 npmMIT