Ara Records MCP Server
Enables monitoring and analysis of Ansible playbook executions through the Ara Records API. Provides real-time playbook monitoring, task progress tracking, and comprehensive access to Ansible execution data.
README
Ara Records MCP Server
A custom Model Context Protocol (MCP) server for integrating with the Ara Records API, enabling Ansible playbook execution monitoring through Claude Code.
Overview
This MCP server provides programmatic access to Ara Records (Ansible Run Analysis) API endpoints, allowing Claude Code to query and analyze Ansible playbook execution data.
Setup
Prerequisites
- Node.js >= 18.0.0
- Ara API running locally (default:
http://localhost:8000)
Installation
Install via npx (Recommended)
The easiest way to install is using claude mcp add with npx:
# Local installation (project-specific, default)
claude mcp add ara-api -- npx -y @ultroncore/ara-records-mcp
# User installation (available globally for your user)
claude mcp add --scope user ara-api -- npx -y @ultroncore/ara-records-mcp
With custom ARA server:
claude mcp add --scope user ara-api -- npx -y @ultroncore/ara-records-mcp --api-server http://ara.example.com:8080
With authentication:
claude mcp add --scope user ara-api -- npx -y @ultroncore/ara-records-mcp --api-server https://ara.example.com --username admin --password secret
Scope options:
local(default): Project-specific installationuser: Available globally for your user accountproject: Project-specific (same as local)
You can also run it directly without installation:
npx @ultroncore/ara-records-mcp --help
Install Globally via npm
For global installation (allows running ara-records-mcp from anywhere):
npm install -g @ultroncore/ara-records-mcp
Then run directly:
ara-records-mcp --help
ara-records-mcp --api-server http://localhost:8000
Install from GitHub
Install directly from the GitHub repository:
npm install git+https://github.com/syndr/ara-records-mcp.git
This will automatically:
- Clone the repository
- Install the
@modelcontextprotocol/sdkdependency - Make the MCP server ready to use
Install from Local Clone
If you've cloned the repository locally:
# Quick setup (recommended)
./setup.sh
# Manual setup
npm install
The setup script will:
- Verify Node.js >= 18.0.0 is installed
- Install
@modelcontextprotocol/sdkand dependencies - Validate the installation was successful
Common Setup Scenarios
- Initial repository clone
- Merging feature branches
- Switching between worktrees
- After running
git clean -fdx
Features
Resources (Read-Only Access)
The server exposes the following resources via the ara:// URI scheme:
ara://playbooks- List of recorded Ansible playbooksara://plays- List of recorded Ansible playsara://tasks- List of recorded Ansible tasksara://hosts- List of recorded Ansible hostsara://results- List of recorded task resultsara://latesthosts- Latest playbook result for each hostara://running- Currently executing Ansible playbooks (for real-time monitoring)
Tools
- ara_query - Query arbitrary Ara API endpoints with GET/POST support and automatic pagination
- watch_playbook - Monitor a specific playbook execution with detailed progress tracking, task completion status, and execution timeline
- get_playbook_status - Get a quick summary of playbook execution status without detailed task information
Technical Details
Project Structure
ara-records-mcp/
├── ara-server.js # Main MCP server implementation
├── package.json # Node.js dependencies
├── package-lock.json # Locked dependency versions
├── setup.sh # Automated setup script
├── .gitignore # Git ignore rules
└── README.md # This documentation
Configuration
Configure the server in your Claude Code .mcp.json file:
After Installing from GitHub
{
"mcpServers": {
"ara-api": {
"command": "node",
"args": ["node_modules/ara-records-mcp/ara-server.js"],
"env": {
"ARA_API_SERVER": "http://localhost:8000"
}
}
}
}
After Local Clone/Development
{
"mcpServers": {
"ara-api": {
"command": "node",
"args": ["ara-server.js"],
"env": {
"ARA_API_SERVER": "http://localhost:8000"
}
}
}
}
Environment Variables and CLI Arguments
Configuration can be provided via environment variables or CLI arguments. CLI arguments take precedence over environment variables.
| CLI Argument | Environment Variable | Description | Default | Required |
|---|---|---|---|---|
--api-server <url> |
ARA_API_SERVER |
Base URL of the Ara API server | http://localhost:8000 |
No |
--username <user> |
ARA_USERNAME |
Username for HTTP Basic Authentication | None | No |
--password <pass> |
ARA_PASSWORD |
Password for HTTP Basic Authentication | None | No |
Priority: CLI arguments > Environment variables > Defaults
Authentication Support
The server currently supports HTTP Basic Authentication for scenarios where the Ara API is behind a reverse proxy (nginx, Apache, etc.) that implements authentication.
Additional authentication methods (API tokens, OAuth, etc.) may be added in future releases.
Example with Basic Auth (Environment Variables):
{
"mcpServers": {
"ara-api": {
"command": "node",
"args": ["node_modules/ara-records-mcp/ara-server.js"],
"env": {
"ARA_API_SERVER": "https://ara.example.com",
"ARA_USERNAME": "your-username",
"ARA_PASSWORD": "your-password"
}
}
}
}
Example with Basic Auth (CLI Arguments via npx):
claude mcp add ara-api -- npx -y @ultroncore/ara-records-mcp --api-server https://ara.example.com --username your-username --password your-password
Note: Both ARA_USERNAME and ARA_PASSWORD (or --username and --password) must be set for authentication to be enabled. If only one is provided, no authentication will be used.
API Endpoints
The server connects to Ara's REST API v1 endpoints:
- Base URL:
http://localhost:8000(configurable viaARA_API_SERVERenvironment variable or--api-serverCLI argument) - API Path:
/api/v1(hardcoded for consistency) - Full endpoints:
/api/v1/playbooks,/api/v1/plays, etc.
Automatic Pagination
All requests include automatic pagination to prevent token overflow:
- Default Limit: 10 results per request (if not specified)
- Smart Ordering: Automatically applies
order=-startedto chronological endpoints (playbooks, plays, tasks, results) - Token Efficiency: Prevents MCP tool responses from exceeding token limits
- Backward Compatibility: Respects explicit query parameters when provided
Requirements
- Ara API must be running and accessible (default:
http://localhost:8000) - Claude Code restart required after installation to load the MCP server
- Supports GET/POST operations only
Development
Running Tests
The project includes a comprehensive test suite using Node.js built-in test runner (no dependencies required).
Run all tests:
npm test
Run tests in watch mode (Node 19+):
node --test --watch
Test Coverage
Tests cover:
- CLI Argument Parsing: Validates
--api-server,--username,--passwordflags and defaults - Authentication Headers: Tests Basic auth header generation and base64 encoding
- Pagination Logic: Validates automatic limit/order defaults and parameter preservation
- MCP Schema Validation: Tests resources, tools, URI mappings, and response formats
Publishing Releases
The project uses automated GitHub Actions workflows for releases:
Setup npm Token (One-time)
- Create an npm access token at https://www.npmjs.com/settings/your-username/tokens
- Add the token as a GitHub repository secret:
- Go to repository Settings → Secrets and variables → Actions
- Click "New repository secret"
- Name:
NPM_TOKEN - Value: Your npm token
Releasing a New Version
-
Update version in
package.json(following semver):# For bug fixes npm version patch # For new features (backward compatible) npm version minor # For breaking changes npm version major -
Commit and push to main branch:
git add package.json git commit -m "Bump version to X.Y.Z" git push origin main -
The Release workflow automatically:
- Detects version change
- Creates git tag (e.g.,
v1.1.0) - Creates GitHub release with auto-generated notes
- Publishes package to npm
You can also trigger releases manually via workflow_dispatch in the GitHub Actions tab.
Testing the MCP Server
Verify Ara API is Running
curl -s http://localhost:8000/api/v1/ | jq
Test MCP Server Startup
timeout 2 node ara-server.js 2>&1
Expected output: *whirring* Ara MCP server activated. Testing chamber operational.
Verification Steps
- Ara API Check: Ensure Ara is running and responding at
http://localhost:8000/api/v1/ - MCP Server Test: Run the server directly to confirm no startup errors
- Claude Code Integration: Restart Claude Code and verify MCP resources are available
- Resource Access: Test accessing
ara://playbooksand other resources
Usage Examples
Default Query with Automatic Pagination
mcp__ara-api__ara_query({ endpoint: "/api/v1/playbooks" })
// Automatically applies: limit=10&order=-started
Explicit Pagination
mcp__ara-api__ara_query({ endpoint: "/api/v1/playbooks?limit=10&offset=20" })
// Respects user-provided parameters
Specific Resource Lookup
mcp__ara-api__ara_query({ endpoint: "/api/v1/playbooks/2273" })
// No pagination applied for specific resource IDs
Real-Time Playbook Monitoring
Monitor a playbook execution as it runs:
// Get detailed progress with task information
mcp__ara-api__watch_playbook({
playbook_id: 2510,
include_tasks: true,
include_results: false
})
// Returns:
// - Execution status (running, completed, failed)
// - Progress percentage (tasks completed / total tasks)
// - Task list with status, timing, and action details
// - Host and play counts
Quick Status Check
Check playbook status without verbose task details:
mcp__ara-api__get_playbook_status({ playbook_id: 2510 })
// Returns:
// - Current status
// - Progress percentage
// - Start/end times and duration
// - Playbook path
Monitor Running Playbooks
List all currently executing playbooks:
// Using resource
ReadMcpResourceTool({ server: "ara-api", uri: "ara://running" })
// Or using ara_query
mcp__ara-api__ara_query({ endpoint: "/api/v1/playbooks?status=running" })
Implementation Notes
Architecture
- Uses schema-based request handlers (
ListResourcesRequestSchema,ReadResourceRequestSchema,CallToolRequestSchema) - Implements MCP SDK v1.0.0+ standards
- Provides both resource exposure and tool functionality for comprehensive API access
- Automatic pagination and ordering to prevent token overflow in large result sets
Real-Time Monitoring
While Ara doesn't natively support WebSockets, the MCP server provides polling-based monitoring that Claude can use to watch playbook execution:
- Polling Pattern: Tools return current state that can be called repeatedly
- Progress Tracking: Calculates completion percentage based on tasks completed vs total tasks
- Resource Filtering: The
ara://runningresource filters for in-progress playbooks only - Structured Data: Returns normalized JSON with status, timing, and progress information
How to Use for Monitoring:
- Get list of running playbooks from
ara://runningresource - Use
get_playbook_status()tool to check progress periodically - Use
watch_playbook()tool for detailed task-level monitoring - Call tools repeatedly (every few seconds) to track execution progress
Error Handling
The server implements basic error handling for:
- Invalid resource URIs
- HTTP errors from Ara API
- Network connectivity issues
- Missing or invalid playbook IDs
Future Enhancements
- [x] Basic Authentication: HTTP Basic Auth support via environment variables (completed)
- [ ] Additional Authentication Methods: Support for API tokens, OAuth, JWT, or other auth mechanisms
- [x] Pagination: Implement proper pagination handling for large result sets (completed)
- [ ] Advanced Filtering: Add more sophisticated query parameter support for resource endpoints
- [ ] Enhanced Error Handling: Improve error messages and recovery strategies
- [x] Real-Time Monitoring: Polling-based playbook execution monitoring with progress tracking (completed - note: WebSocket not supported by Ara API, implemented polling-based solution instead)
- [ ] Automated Deployment: Ansible playbook for updating and deploying the MCP server
Version History
v1.0.0 (2025-10-20) - Initial Release
- Basic Authentication Support: HTTP Basic Authentication for reverse proxy scenarios
- Environment variables
ARA_USERNAMEandARA_PASSWORDfor credentials - Automatic Authorization header generation with base64 encoding
- Future-ready for additional authentication methods
- Environment variables
- Real-Time Monitoring: Polling-based playbook execution monitoring
- New
ara://runningresource for listing active playbooks watch_playbooktool for detailed progress tracking with task informationget_playbook_statustool for quick status checks- Progress calculation (percentage, task counts, timing information)
- New
- Pagination Support: Automatic pagination with configurable limits and smart ordering
- MCP SDK Integration: Schema-based request handlers using MCP SDK v1.0.0+
- Token Optimization: Safeguards to prevent token overflow in responses
- GitHub Installation: Proper package.json metadata for direct git installation
License
MIT
Support
For issues or questions, please refer to the main project documentation or submit an issue to the repository.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。