mako10k/mcp-integrated-search-server
If you are the rightful owner of mcp-integrated-search-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The Integrated Search MCP Server combines Google Custom Search API and Redmine API to facilitate seamless web searching and project management.
Integrated Search MCP Server
A Model Context Protocol (MCP) server that provides both Google Custom Search API and Redmine API integration, allowing AI assistants to search the web and manage Redmine projects seamlessly.
Features
Google Custom Search
- Web Search: Search the web using Google Custom Search API
- Image Search: Find images with advanced filtering options
- Advanced Parameters: Support for language restrictions, site-specific searches, file type filtering, and more
Redmine API Integration
- Issue Management: List, create, view, and update Redmine issues with detailed analysis
- Project Management: Browse Redmine projects
- Advanced Filtering: Filter issues by project, status, assignee, and more
- Comprehensive Details: Access full issue information including custom fields
- Bulk Operations: Update multiple issues simultaneously
- Issue Comments: Add new journal notes and list existing comments with pagination helpers
- Smart Progress Tracking: Update issue progress, due dates, estimated hours, and assignment with workflow-aware error handling
- Detailed Update Reports: Before/after comparison showing which fields succeeded and which failed due to Redmine constraints
- Workflow-Aware Updates: Intelligent handling of Redmine workflow restrictions and field permissions
Common Features
- Error Handling: Robust error handling with detailed error messages
- Input Validation: Comprehensive input validation using Zod schemas
- Configurable: Environment-based configuration
- Dual API Support: Seamlessly switch between Google Search and Redmine operations
Installation
- Clone this repository:
git clone <repository-url>
cd mcp-integrated-search-server
- Install dependencies:
npm install
- Set up environment variables:
cp .env.example .env
- Edit
.envfile with your API credentials:
# Google Custom Search API Configuration
GOOGLE_API_KEY=your_google_api_key_here
GOOGLE_SEARCH_ENGINE_ID=your_custom_search_engine_id_here
# Redmine API Configuration (optional)
REDMINE_URL=https://your-redmine-instance.com
REDMINE_API_KEY=your_redmine_api_key_here
# MCP Server Configuration
LOG_LEVEL=info
- Build the project:
npm run build
Google API Setup
1. Get Google API Key
- Go to the Google Cloud Console
- Create a new project or select an existing one
- Enable the Custom Search API
- Go to "Credentials" and create an API key
- Restrict the API key to Custom Search API for security
2. Create Custom Search Engine
- Go to Google Custom Search Engine
- Click "Add" to create a new search engine
- Enter a site to search (you can use
*to search the entire web) - Click "Create"
- Go to "Setup" and copy the "Search engine ID"
Redmine API Setup
Multi-Repository (Recommended)
This server supports multiple Redmine repositories with secure secret handling.
- Create a config file from the example:
Copy-Item redmine-repositories.example.json redmine-repositories.json
- Set environment variables referenced by the config (see
.env.example):
Copy-Item .env.example .env
# then edit .env to set REDMINE_MAIN_API_KEY, REDMINE_DEV_API_KEY, etc.
- Optionally specify a custom config path:
$env:REDMINE_CONFIG_PATH = "./redmine-repositories.json"
Notes:
- Do not hardcode API keys in JSON. Use
${VAR_NAME}references. - When calling any Redmine tool, you may pass
repository_idto select a repository. If omitted, the default repository is used.
1. Get Redmine API Key
- Log in to your Redmine instance
- Go to "My account" (usually in the top right corner)
- Click on "API access key" in the right sidebar
- Click "Show" to reveal your API key, or "Reset" to generate a new one
- Copy the API key
2. Configure Redmine URL (Legacy single-repository)
- Set
REDMINE_URLto your Redmine instance URL (e.g.,https://redmine.example.com) - Set
REDMINE_API_KEYto your API key from step 1
Note: Legacy env-based configuration remains supported as a fallback when multi-repository config is not present.
Usage
With Claude Desktop
Add the server to your Claude Desktop configuration:
MacOS/Linux: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"integrated-search-server": {
"command": "node",
"args": ["/absolute/path/to/mcp-integrated-search-server/build/index.js"],
"env": {
"GOOGLE_API_KEY": "your_google_api_key_here",
"GOOGLE_SEARCH_ENGINE_ID": "your_custom_search_engine_id_here",
"REDMINE_URL": "https://your-redmine-instance.com",
"REDMINE_API_KEY": "your_redmine_api_key_here"
}
}
}
}
Available Tools (10 total)
Google Search Tools (2)
1. google_search
Search the web using Google Custom Search API.
Parameters:
query(required): The search query stringnum(optional): Number of results to return (1-10, default: 10)start(optional): Starting index for results (default: 1)lr(optional): Language restriction (e.g., 'lang_en', 'lang_ja')safe(optional): Safe search setting ('active' or 'off', default: 'active')siteSearch(optional): Restrict search to specific site (e.g., 'github.com')fileType(optional): Restrict to file types (e.g., 'pdf', 'doc')
Example usage:
Search for "TypeScript tutorial" with 5 results
Search for "machine learning" on site:arxiv.org
Search for "documentation" filetype:pdf
2. google_search_images
Search for images using Google Custom Search API.
Parameters:
query(required): The image search query stringnum(optional): Number of results to return (1-10, default: 10)start(optional): Starting index for results (default: 1)safe(optional): Safe search setting ('active' or 'off', default: 'active')imgSize(optional): Image size filter ('huge', 'icon', 'large', 'medium', 'small', 'xlarge', 'xxlarge')imgType(optional): Image type filter ('clipart', 'face', 'lineart', 'stock', 'photo', 'animated')
Example usage:
Search for images of "golden retriever"
Find large photos of "sunset landscape"
Search for clipart images of "business icons"
Redmine API Tools (8)
All Redmine tools accept an optional repository_id parameter to target a specific repository. When omitted, the default repository configured in redmine-repositories.json is used.
3. redmine_list_issues
List and filter Redmine issues.
Parameters:
repository_id(optional): Target repository id (default repository if omitted)project_id(optional): Project ID or identifier (defaults to repository setting when omitted)status_id(optional): Status ID, status name/partial match, oropen/closed/*assigned_to_id(optional): User ID of the assigneelimit(optional): Number of issues to return (1-100, default: 25)offset(optional): Starting index for pagination (default: 0)sort(optional): Sort field (e.g., 'id', 'created_on', 'updated_on')created_on(optional): Filter by creation date (e.g., '>=2023-01-01')updated_on(optional): Filter by update date
Example usage:
List all open issues
List issues for project 1
List issues assigned to user 5
4. redmine_create_issue
Create a new Redmine issue.
repository_id(optional): Target repository id (default repository if omitted)project_id(optional): Project ID or identifier (uses repository default when omitted)subject(required): Issue subject/titledescription(optional): Issue descriptiontracker_id(optional): Tracker ID or name (partial match allowed)status_id(optional): Status ID or name (partial match allowed)priority_id(optional): Priority ID or name (partial match allowed)assigned_to_id(optional): User ID to assign the issue tostart_date(optional): Start date (YYYY-MM-DD)due_date(optional): Due date (YYYY-MM-DD)estimated_hours(optional): Estimated hours
Example usage:
Create a bug report for project 1
Create a feature request with high priority
Create an assigned task with due date
5. redmine_list_projects
List available Redmine projects.
Parameters:
limit(optional): Number of projects to return (1-100, default: 25)offset(optional): Starting index for pagination (default: 0)
Example usage:
List all projects
List first 10 projects
Browse projects with pagination
6. redmine_get_issue
Get detailed information about a specific Redmine issue.
Parameters:
issue_id(required): The ID of the issue to retrieveinclude(optional): Additional data to include ('attachments', 'relations', 'journals', 'watchers')
Example usage:
Get issue #123 details
Get issue #456 with attachments and journals
Get full issue information including relations
7. redmine_update_issue
Update an existing Redmine issue with detailed analysis reporting.
issue_id(required): The ID of the issue to updatestatus_id(optional): New status ID or name (workflow restrictions still apply)assigned_to_id(optional): New assignee user IDdone_ratio(optional): Progress percentage (0-100)notes(optional): Comment/notes to addpriority_id(optional): New priority ID or namedue_date(optional): Due date (YYYY-MM-DD format)estimated_hours(optional): Estimated hourscustom_fields(optional): Array of custom field updates
Enhanced Features:
- Before/After Comparison: Shows exactly what changed
- Success/Failure Analysis: Clearly identifies which fields updated successfully
- Workflow-Aware: Explains when Redmine workflow restrictions prevent updates
- Detailed Reporting: Provides comprehensive feedback on all attempted changes
Example usage:
Update issue #123 status to completed
Update issue #456 progress to 75% and add notes
Change assignee and due date for issue #789
8. redmine_bulk_update_issues
Update multiple Redmine issues at once.
issue_ids(required): Array of issue IDs to updatestatus_id(optional): New status ID or name for all issuesassigned_to_id(optional): New assignee user ID for all issuesnotes(optional): Comment/notes to add to all issues
Example usage:
Mark multiple issues as completed
Reassign several issues to a different user
Add bulk comments to multiple issues
9. redmine_list_issue_comments
List existing Redmine issue comments (journals containing notes) with client-side pagination.
repository_id(optional): Target repository id (default repository if omitted)issue_id(required): Issue whose comments should be inspectedoffset(optional): 0-based offset after sorting bycreated_on(default: 0)limit(optional): Number of comments to return (1-100, default: 20)
Returns a formatted list plus metadata (total count, whether more comments remain, and the next offset to request).
Example usage:
List the latest 5 comments for issue #42
Paginate through comments using next offset values
Inspect whether private comments exist (requires proper Redmine permissions)
10. redmine_add_issue_comment
Append a new journal note to a Redmine issue using the official notes field.
repository_id(optional): Target repository id (default repository if omitted)issue_id(required): Issue to append the comment tonotes(required): Comment text (must contain non-whitespace characters)private_notes(optional): Mark comment as private (Redmine permission dependent)
After a successful update the tool retrieves the latest journal entry so you can verify author, timestamp, and visibility.
Example usage:
Add a public handoff comment to issue #77
Create an internal/private status update for issue #501
Post deployment notes directly from an MCP client
Development
Building
npm run build
Running in Development
npm run dev
Testing
npm test
Configuration
Environment variables:
GOOGLE_API_KEY: Your Google API key (required for Google Search)GOOGLE_SEARCH_ENGINE_ID: Your Custom Search Engine ID (required for Google Search)REDMINE_URL: Your Redmine instance URL (optional, required for Redmine features)REDMINE_API_KEY: Your Redmine API key (optional, required for Redmine features)LOG_LEVEL: Logging level ('error', 'warn', 'info', 'debug', default: 'info')
API Limits
Google Custom Search API
- 100 queries per day for free
- Up to 10,000 queries per day with billing enabled
- Maximum 10 results per query
Redmine API
- Limits depend on your Redmine instance configuration
- Most Redmine instances have no built-in API rate limits
- Consider server resources when making bulk requests
Error Handling
The server provides detailed error messages for common issues:
- Invalid API key or search engine ID
- Quota exceeded
- Invalid parameters
- Network errors
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
License
MIT License - see LICENSE file for details.
Support
For issues and questions:
- Check the Google Custom Search API documentation
- Verify your API key and search engine ID
- Check the server logs for detailed error messages
- Create an issue in this repository