Rapid URL Indexer MCP Server
by jphyqr
README.md
# Rapid URL Indexer MCP Server
An MCP (Model Context Protocol) server for submitting URLs to the [Rapid URL Indexer](https://rapidurlindexer.com) API. Track submissions across multiple projects, monitor indexing progress, and auto-detect new pages from sitemaps.
**Target:** 50,000 pages/year across 10+ apps
## Features
- Submit individual URLs or entire sitemaps for Google indexing
- Track all submissions across multiple projects/apps
- Automatic deduplication of already-submitted URLs
- Monitor indexing progress and credit usage
- View statistics and projections toward goals
## Installation
```bash
# Clone the repository
git clone https://github.com/jphyqr/rapid-indexer-mcp.git
cd rapid-indexer-mcp
# Install dependencies
npm install
# Build
npm run build
```
## Configuration
### API Key
Set your Rapid URL Indexer API key via environment variable:
```bash
export RAPID_INDEXER_API_KEY=your-api-key
```
Or create a config file at `~/.rapid-indexer/config.json`:
```json
{
"apiKey": "your-api-key",
"defaultApexMode": false,
"defaultNotify": false,
"apps": {}
}
```
### Claude Code MCP Config
Add to your Claude Code MCP configuration (`~/.claude/mcp.json` or VS Code settings):
```json
{
"mcpServers": {
"rapid-indexer": {
"command": "node",
"args": ["/path/to/rapid-indexer-mcp/dist/index.js"],
"env": {
"RAPID_INDEXER_API_KEY": "your-api-key"
}
}
}
}
```
## Tools
### `submit_urls`
Submit URLs for indexing.
```
Submit these URLs to the indexer for vancouversublets:
https://vancouversublets.com/listing/123
https://vancouversublets.com/listing/456
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `urls` | string[] | Yes | Array of URLs to index |
| `app_name` | string | Yes | Project/app identifier |
| `project_name` | string | No | Optional batch name |
| `apex_mode` | boolean | No | 3 credits/URL, faster indexing |
| `notify` | boolean | No | Email notifications |
### `submit_sitemap`
Parse and submit URLs from a sitemap.xml file.
```
Submit new pages from vancouversublets.com sitemap, only listing pages
```
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `sitemap_url` | string | Yes | URL to sitemap.xml |
| `app_name` | string | Yes | Project/app identifier |
| `filter_pattern` | string | No | Regex to include URLs |
| `exclude_pattern` | string | No | Regex to exclude URLs |
| `skip_already_submitted` | boolean | No | Skip duplicates (default: true) |
| `limit` | number | No | Max URLs to submit |
| `apex_mode` | boolean | No | Enable Apex Mode |
### `check_balance`
Get current credit balance.
```
What's my indexing credit balance?
```
### `list_projects`
List all indexing projects.
```
Show me all my indexing projects for vancouversublets
```
### `get_project_status`
Get detailed status for a project.
```
What's the status of project 123?
```
### `get_report`
Download indexing report showing which URLs were indexed.
```
Get the indexing report for project 123
```
### `get_history`
Get local submission history.
```
Show my indexing history for the last 7 days
```
### `get_stats`
Get statistics and usage tracking.
```
How's my indexing going this month?
```
## Resources
The server exposes two MCP resources:
- `indexer://history` - Full submission history
- `indexer://apps` - List of tracked apps with summary stats
## Local Storage
Data is stored in `~/.rapid-indexer/`:
- `history.json` - All submissions, app tracking, monthly usage
- `config.json` - API key and app configurations
## Example Workflows
### Daily New Page Indexing
```
User: "Submit new pages from vancouversublets sitemap"
Claude: Uses submit_sitemap with skip_already_submitted=true
- Fetches sitemap
- Compares against history
- Submits only new URLs
```
### Bulk Initial Indexing
```
User: "Index all listing pages from vancouversublets, use apex mode"
Claude: Uses submit_sitemap with filter_pattern="/listing/", apex_mode=true
- Submits all matching URLs
- Uses 3 credits per URL for faster indexing
```
### Check Progress
```
User: "How's my indexing going this month?"
Claude: Uses get_stats with period="month"
- Shows submitted vs indexed
- Shows by-app breakdown
- Shows if on track for 50k goal
```
## Development
```bash
# Watch mode
npm run dev
# Build
npm run build
# Run directly
npm start
```
## License
MIT
## Author
John Hashem <john@hashbuilds.com>
TDQS
A3.8/5.0
Scored across 8 tools
Disambiguation5/5
Each tool targets a distinct function: submitting URLs, submitting sitemaps, checking balance, managing projects, and retrieving reports/history/stats. There is no overlap or ambiguity between tool purposes.
Naming Consistency5/5
All tools follow a consistent verb_noun pattern (e.g., submit_urls, get_report, list_projects). No mixed conventions or irregular naming.
Tool Count5/5
8 tools is well-scoped for the service, covering submission, monitoring, and reporting without unnecessary bloat or missing essentials.
Completeness5/5
The tool set covers the full lifecycle: submit individual URLs or sitemaps, check credits, list and inspect projects, download reports, and review local history/stats. No obvious dead ends or critical missing operations for the stated purpose.
Maintenance
ActivityInactive
ResponsivenessNo issues