Update README with deployment options and MCP configuration examples
This commit is contained in:
126
README.md
126
README.md
@@ -26,32 +26,92 @@ An MCP (Model Context Protocol) server that provides chat and image analysis cap
|
|||||||
- Exponential backoff for retries
|
- Exponential backoff for retries
|
||||||
- Automatic rate limit handling
|
- Automatic rate limit handling
|
||||||
|
|
||||||
## Installation
|
## Quick Start Configuration
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install @stabgan/openrouter-mcp-multimodal
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
1. Get your OpenRouter API key from [OpenRouter Keys](https://openrouter.ai/keys)
|
1. Get your OpenRouter API key from [OpenRouter Keys](https://openrouter.ai/keys)
|
||||||
2. Choose a default model (optional)
|
2. Choose a default model (optional)
|
||||||
|
|
||||||
### Setup
|
### MCP Configuration Options
|
||||||
|
|
||||||
Add the server to your MCP settings file (e.g., `cline_mcp_settings.json` or `claude_desktop_config.json`):
|
Add one of the following configurations to your MCP settings file (e.g., `cline_mcp_settings.json` or `claude_desktop_config.json`):
|
||||||
|
|
||||||
|
#### Option 1: Using npx (Node.js)
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"mcpServers": {
|
"mcpServers": {
|
||||||
"openrouter_multimodal": {
|
"openrouter": {
|
||||||
"command": "npx",
|
"command": "npx",
|
||||||
"args": ["@stabgan/openrouter-mcp-multimodal"],
|
"args": [
|
||||||
|
"-y",
|
||||||
|
"@stabgan/openrouter-mcp-multimodal"
|
||||||
|
],
|
||||||
"env": {
|
"env": {
|
||||||
"OPENROUTER_API_KEY": "your-api-key-here",
|
"OPENROUTER_API_KEY": "your-api-key-here",
|
||||||
"OPENROUTER_DEFAULT_MODEL": "optional-default-model"
|
"OPENROUTER_DEFAULT_MODEL": "anthropic/claude-3.5-sonnet"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Option 2: Using uv (Python Package Manager)
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"openrouter": {
|
||||||
|
"command": "uv",
|
||||||
|
"args": [
|
||||||
|
"run",
|
||||||
|
"-m",
|
||||||
|
"openrouter_mcp_multimodal"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"OPENROUTER_API_KEY": "your-api-key-here",
|
||||||
|
"OPENROUTER_DEFAULT_MODEL": "anthropic/claude-3.5-sonnet"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Option 3: Using Docker
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"openrouter": {
|
||||||
|
"command": "docker",
|
||||||
|
"args": [
|
||||||
|
"run",
|
||||||
|
"--rm",
|
||||||
|
"-i",
|
||||||
|
"-e", "OPENROUTER_API_KEY=your-api-key-here",
|
||||||
|
"-e", "OPENROUTER_DEFAULT_MODEL=anthropic/claude-3.5-sonnet",
|
||||||
|
"stabgan/openrouter-mcp-multimodal:latest"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Option 4: Using Smithery (recommended)
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"openrouter": {
|
||||||
|
"command": "smithery",
|
||||||
|
"args": [
|
||||||
|
"run",
|
||||||
|
"stabgan/openrouter-mcp-multimodal"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"OPENROUTER_API_KEY": "your-api-key-here",
|
||||||
|
"OPENROUTER_DEFAULT_MODEL": "anthropic/claude-3.5-sonnet"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -66,7 +126,7 @@ Send text or multimodal messages to OpenRouter models:
|
|||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
use_mcp_tool({
|
use_mcp_tool({
|
||||||
server_name: "openrouter_multimodal",
|
server_name: "openrouter",
|
||||||
tool_name: "chat_completion",
|
tool_name: "chat_completion",
|
||||||
arguments: {
|
arguments: {
|
||||||
model: "google/gemini-2.5-pro-exp-03-25:free", // Optional if default is set
|
model: "google/gemini-2.5-pro-exp-03-25:free", // Optional if default is set
|
||||||
@@ -89,7 +149,7 @@ For multimodal messages with images:
|
|||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
use_mcp_tool({
|
use_mcp_tool({
|
||||||
server_name: "openrouter_multimodal",
|
server_name: "openrouter",
|
||||||
tool_name: "chat_completion",
|
tool_name: "chat_completion",
|
||||||
arguments: {
|
arguments: {
|
||||||
model: "anthropic/claude-3.5-sonnet",
|
model: "anthropic/claude-3.5-sonnet",
|
||||||
@@ -120,7 +180,7 @@ Analyze a single image with an optional question:
|
|||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
use_mcp_tool({
|
use_mcp_tool({
|
||||||
server_name: "openrouter_multimodal",
|
server_name: "openrouter",
|
||||||
tool_name: "analyze_image",
|
tool_name: "analyze_image",
|
||||||
arguments: {
|
arguments: {
|
||||||
image_path: "/absolute/path/to/image.jpg",
|
image_path: "/absolute/path/to/image.jpg",
|
||||||
@@ -136,7 +196,7 @@ Analyze multiple images with a single prompt:
|
|||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
use_mcp_tool({
|
use_mcp_tool({
|
||||||
server_name: "openrouter_multimodal",
|
server_name: "openrouter",
|
||||||
tool_name: "multi_image_analysis",
|
tool_name: "multi_image_analysis",
|
||||||
arguments: {
|
arguments: {
|
||||||
images: [
|
images: [
|
||||||
@@ -160,7 +220,7 @@ Search and filter available models:
|
|||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
use_mcp_tool({
|
use_mcp_tool({
|
||||||
server_name: "openrouter_multimodal",
|
server_name: "openrouter",
|
||||||
tool_name: "search_models",
|
tool_name: "search_models",
|
||||||
arguments: {
|
arguments: {
|
||||||
query: "claude", // Optional text search
|
query: "claude", // Optional text search
|
||||||
@@ -179,7 +239,7 @@ Get detailed information about a specific model:
|
|||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
use_mcp_tool({
|
use_mcp_tool({
|
||||||
server_name: "openrouter_multimodal",
|
server_name: "openrouter",
|
||||||
tool_name: "get_model_info",
|
tool_name: "get_model_info",
|
||||||
arguments: {
|
arguments: {
|
||||||
model: "anthropic/claude-3.5-sonnet"
|
model: "anthropic/claude-3.5-sonnet"
|
||||||
@@ -193,7 +253,7 @@ Check if a model ID is valid:
|
|||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
use_mcp_tool({
|
use_mcp_tool({
|
||||||
server_name: "openrouter_multimodal",
|
server_name: "openrouter",
|
||||||
tool_name: "validate_model",
|
tool_name: "validate_model",
|
||||||
arguments: {
|
arguments: {
|
||||||
model: "google/gemini-2.5-pro-exp-03-25:free"
|
model: "google/gemini-2.5-pro-exp-03-25:free"
|
||||||
@@ -211,6 +271,32 @@ The server provides detailed error messages for various failure cases:
|
|||||||
- Invalid image formats
|
- Invalid image formats
|
||||||
- Authentication problems
|
- Authentication problems
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Common Issues
|
||||||
|
|
||||||
|
- **"fetch is not defined" error**: This often occurs when the Node.js environment doesn't have global fetch. Use Node.js v18+ or add the PATH environment variable to your configuration as shown below:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"openrouter": {
|
||||||
|
"command": "npx",
|
||||||
|
"args": [
|
||||||
|
"-y",
|
||||||
|
"@stabgan/openrouter-mcp-multimodal"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"OPENROUTER_API_KEY": "your-api-key-here",
|
||||||
|
"PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- **Image analysis failures**: Make sure your image path is absolute and the file format is supported.
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
To build from source:
|
To build from source:
|
||||||
@@ -224,4 +310,4 @@ npm run build
|
|||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|||||||
Reference in New Issue
Block a user