Skip to main content
Glama
seekr-sh

MCP Seekr Server

by seekr-sh

MCP Seekr Server

A production-ready Model Context Protocol (MCP) server that provides web search and content extraction capabilities via the Seekr API.

πŸ“‹ Requirements

  • Python 3.10+: This MCP server requires Python 3.10 or higher to run

✨ Features

  • Web Search: Search Google and Wikipedia with advanced filtering

  • Content Extraction: Extract clean text content from any webpage

  • Input Validation: Comprehensive validation for URLs and search queries

  • Rate Limiting: Built-in protection against API abuse (100 calls/minute)

  • Health Monitoring: Health check endpoint for monitoring

  • Environment Configuration: Configurable via environment variables

  • Production Ready: Comprehensive error handling and logging

  • MCP Compatible: Works with all MCP-enabled AI clients

πŸš€ Quick Start

Installation

# Clone the repository
git clone https://github.com/seekr-sh/mcp-server-seekr.git
cd mcp-seekr

# Install dependencies
pip install -r requirements.txt

# Optional: Create and configure .env file
cp .env.example .env

Running the Server

# Start the server (for development)
python seekr.py

# Or after installation
mcp-server-seekr

The server runs with stdio transport for MCP client compatibility.

πŸ”§ Configuration

Environment Variables

Create a .env file in the project root:

# Seekr API Configuration
SEEKR_BASE_URL=https://engine.seekr.sh
SEEKR_API_KEY=your_api_key_here
SEEKR_TIMEOUT=30
SEEKR_MAX_RETRIES=3

# Rate Limiting
MAX_CALLS_PER_MINUTE=100

# Logging
LOG_LEVEL=INFO

# Server Configuration (optional)
PORT=8000
HOST=127.0.0.1

Note: You can also set these as environment variables directly instead of using a .env file. The application will automatically load from .env if it exists, or fall back to system environment variables.

MCP Client Configuration

For Claude Desktop

Add to your Claude Desktop config file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "seekr": {
      "command": "uvx",
      "args": ["mcp-server-seekr"],
      "env": {
        "SEEKR_API_KEY": "your-api-key-here"
      }
    }
  }
}

Alternative configuration (using Python directly):

{
  "mcpServers": {
    "seekr": {
      "command": "python3",
      "args": ["/path/to/mcp-seekr/seekr.py"],
      "env": {
        "SEEKR_API_KEY": "your-api-key-here"
      }
    }
  }
}

This server uses stdio transport for MCP compatibility.

πŸ› οΈ Tools

seekr_query

Search the web using Google.

Parameters:

  • query (string, required): Search query (max 500 characters)

  • num (integer, optional): Number of results 1-50 (default: 10)

Example:

{
  "query": "latest AI developments 2024",
  "num": 5
}

seekr_prism

Extract text content from a webpage URL.

Parameters:

  • url (string, required): Valid HTTP/HTTPS URL to extract content from

Example:

{
  "url": "https://example.com/article"
}

"status": "healthy", "timestamp": 1694598000.123, "version": "1.0.0", "services": { "seekr_api": "healthy" } }

- **Robust Error Handling**: Automatic retries and detailed error reporting
- **Type Safety**: Full TypedDict definitions for reliable API interactions

## πŸ“‹ Installation

### Prerequisites

- Python 3.10 or higher
- pip package manager

### Using pip

```bash
# Install from source
git clone <your-repo-url>
cd mcp-server-seekr
pip install -e .

Development Installation

# Clone the repository
git clone <your-repo-url>
cd mcp-server-seekr

# Install with development dependencies
pip install -e ".[dev]"

βš™οΈ Configuration

For Claude Desktop

Add the following to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "seekr": {
      "command": "seekr-mcp",
      "env": {
        "SEEKR_API_KEY": "your-api-key-here"
      }
    }
  }
}

Environment Variables (Optional)

Create a .env file in your project root:

# Seekr API Configuration (if needed in future)
SEEKR_BASE_URL=https://seekr.dfs.im
SEEKR_TIMEOUT=30
SEEKR_MAX_RETRIES=3

🎯 Usage Examples

When to Use the Tools

Use seekr_search when you need:

  • Current information, recent news, or developments that may have changed since your last training data

  • Real-time web search results from Google or Wikipedia

  • Localized content in different languages and regions

  • Advanced search operators (site-specific, file types, date ranges, etc.)

Use seekr_fetch when you need:

  • To read the actual content of a webpage or article

  • Clean text extraction from websites you can't access directly

  • Analyzing web page content or online documents

# Current news and recent developments
{
  "name": "seekr_search",
  "arguments": {
    "query": "latest developments in quantum computing 2024",
    "engine": "google",
    "language": "en",
    "num": 10,
    "time_range": "month"
  }
}

# Localized search in Portuguese
{
  "name": "seekr_search", 
  "arguments": {
    "query": "notΓ­cias sobre inteligΓͺncia artificial no Brasil",
    "engine": "google",
    "language": "pt",
    "region": "BR",
    "num": 5
  }
}

Advanced Search with Operators

# Search specific sites for technical documentation
{
  "name": "seekr_search",
  "arguments": {
    "query": "machine learning tutorial",
    "site": "github.com",
    "filetype": "pdf",
    "intitle": "guide",
    "num": 20
  }
}

# News search with time filter
{
  "name": "seekr_search",
  "arguments": {
    "query": "climate change solutions",
    "search_type": "news",
    "time_range": "week",
    "language": "en"
  }
}

Web Content Extraction

# Extract article content
{
  "name": "seekr_fetch",
  "arguments": {
    "url": "https://example.com/article",
    "language": "en"
  }
}

# Extract Portuguese content
{
  "name": "seekr_fetch",
  "arguments": {
    "url": "https://example.com/artigo",
    "language": "pt"
  }
}

### Web Scraping

The `seekr_fetch` tool provides clean content extraction:

```python
{
  "url": "https://example.com/article",
  "language": "en"
}

πŸ”§ API Reference

seekr_search Tool

Performs web searches using Seekr API with support for Google and Wikipedia.

Parameters:

Parameter

Type

Required

Description

query

string

Yes

Search query string

engine

string

No

Search engine: "google" (default) or "wikipedia"

language

string

No

Language code (ISO 639-1, e.g., "en", "es")

region

string

No

Region code (ISO 3166-1 alpha-2, e.g., "US", "GB")

safe_search

integer

No

Safe search level: 0=off, 1=medium, 2=high

time_range

string

No

Time filter: "day", "week", "month", "year"

page

integer

No

Page number (1-based, default: 1)

search_type

string

No

Search type: "web", "images", "videos", "news"

num

integer

No

Number of results (max 100 for Google, 50 for Wikipedia)

Advanced Search Operators:

Parameter

Type

Description

site

string

Limit results to specific domain

filetype

string

Limit to specific file types

inurl

string

Search for pages with word in URL

intitle

string

Search for pages with word in title

exact

string

Exact phrase match

exclude

string

Terms to exclude (comma-separated)

or_terms

string

Alternative terms (comma-separated)

seekr_fetch Tool

Scrapes and extracts clean text content from web pages.

Parameters:

Parameter

Type

Required

Description

url

string

Yes

URL of the webpage to scrape

language

string

No

Language code for content extraction

πŸ—οΈ Architecture

mcp-server-seekr/
β”œβ”€β”€ src/mcp_server_seekr/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ main.py              # MCP server implementation
β”‚   β”œβ”€β”€ services/
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   └── seekr_client.py  # Seekr API client
β”‚   β”œβ”€β”€ tools/
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   └── search_tool.py   # Search tools implementation
β”‚   └── types/
β”‚       β”œβ”€β”€ __init__.py
β”‚       └── seekr.py         # Type definitions
β”œβ”€β”€ pyproject.toml           # Project configuration
β”œβ”€β”€ requirements.txt         # Dependencies
└── README.md               # This file

Components

  • SeekrClient: HTTP client for Seekr API with retry logic and error handling

  • SeekrSearchTools: Business logic layer that handles search and fetch operations

  • Main Server: MCP server implementation with tool registration and request handling

  • Type Definitions: Comprehensive TypedDict definitions for type safety

🚨 Error Handling

The server implements comprehensive error handling:

  • Validation Errors: Missing required parameters

  • API Errors: Seekr API failures with detailed error messages

  • Network Errors: Connection issues with automatic retries

  • Timeout Handling: Configurable request timeouts

πŸ§ͺ Testing

Run the test suite:

# Install test dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Run with coverage
pytest --cov=mcp_server_seekr

# Run specific test file
pytest tests/test_seekr_client.py

πŸš€ Development

Setting up Development Environment

# Clone and install in development mode
git clone <your-repo-url>
cd mcp-server-seekr
pip install -e ".[dev]"

# Run formatting
black src/
ruff check src/

# Run type checking
mypy src/

Project Structure Guidelines

  • Use TypedDict for all API request/response types

  • Implement proper error handling with detailed error messages

  • Add logging for debugging and monitoring

  • Follow async/await patterns for all I/O operations

  • Include comprehensive docstrings for all public methods

πŸ“„ License

MIT License - see LICENSE file for details.

🀝 Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Add tests for new functionality

  5. Ensure all tests pass

  6. Submit a pull request

πŸ“ž Support

For issues and questions:

  • Open an issue on GitHub

  • Check existing issues for solutions

  • Review the Seekr API documentation

Available Tools

2 tools
seekr_prismA

Prism and extract detailed text content from a specific webpage URL.

Use this tool to get full content from URLs found in query results. This provides more detailed information than query snippets alone.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesValid HTTP/HTTPS URL to prism and extract text content from

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the tool's behavior as extracting 'detailed text content' and 'full content' from URLs, which is useful. However, it lacks information on potential limitations (e.g., rate limits, authentication needs, error handling for invalid URLs, or content types). The description doesn't contradict annotations, but it could be more comprehensive given the absence of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, consisting of two sentences. The first sentence states the purpose clearly, and the second provides usage guidelines. There is no wasted text, and it is front-loaded with essential information, making it efficient and easy to understand.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (simple single-parameter operation), high schema coverage (100%), and the presence of an output schema (implied by context signals), the description is reasonably complete. It covers purpose and usage context adequately. However, it could improve by addressing behavioral aspects like error cases or performance, especially since no annotations are provided to fill those gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the 'url' parameter well-documented as a 'Valid HTTP/HTTPS URL to prism and extract text content from.' The description adds no additional parameter semantics beyond what the schema provides, such as format examples or constraints. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Prism and extract detailed text content from a specific webpage URL.' It uses specific verbs ('prism and extract') and identifies the resource ('webpage URL'). However, it doesn't explicitly differentiate from its sibling tool 'seekr_query' beyond mentioning 'query results' and 'query snippets,' which is implied but not direct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: 'Use this tool to get full content from URLs found in query results. This provides more detailed information than query snippets alone.' It implies an alternative (query snippets from 'seekr_query') and suggests using this for deeper content extraction. However, it doesn't explicitly state when not to use it or name the sibling tool directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

seekr_queryA

Query for information using Google query engine.

This tool performs web queries to find current information, news, and diverse content. Use this for: current events, news, product information, troubleshooting, recent developments, and real-time information.

After getting query results, use seekr_prism to get detailed content from specific URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
numNoNumber of query results to return (1-50)
queryYesQuery string to find relevant information

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions that the tool performs web queries and finds current information, which implies it's a read-only operation without destructive effects. However, it lacks details on rate limits, authentication needs, or specific behavioral traits like pagination or error handling. The description adds basic context but doesn't fully compensate for the absence of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded: it starts with the core purpose, lists usage scenarios, and ends with a clear call-to-action for the sibling tool. Every sentence adds value without redundancy, making it efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a web query tool with 2 parameters), the description provides good context on usage and sibling tool relationship. Since an output schema exists, the description doesn't need to explain return values. However, with no annotations, it could benefit from more behavioral details like rate limits or error handling, slightly reducing completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters (query and num) with descriptions. The description doesn't add any additional meaning or semantics beyond what the schema provides, such as query formatting examples or result interpretation. This meets the baseline of 3 when schema coverage is high.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Query for information using Google query engine' and 'performs web queries to find current information, news, and diverse content.' It specifies the verb (query) and resource (web information via Google). However, it doesn't explicitly differentiate from its sibling tool seekr_prism beyond mentioning their relationship, which slightly reduces clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidelines: 'Use this for: current events, news, product information, troubleshooting, recent developments, and real-time information.' It also specifies when to use an alternative: 'After getting query results, use seekr_prism to get detailed content from specific URLs.' This clearly distinguishes when to use this tool versus its sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 2 tool updatesv1.0.0
    • First observedseekr_prism
    • First observedseekr_query

TDQS

A4/5.0
Disambiguation5/5

The two tools have clearly distinct purposes: seekr_query performs web searches to find URLs and information, while seekr_prism extracts detailed content from specific URLs. There is no overlap or ambiguity between querying for information and extracting content from a given URL.

Naming Consistency5/5

Both tools follow a consistent 'seekr_' prefix pattern with descriptive suffixes (query and prism). This naming convention is uniform and predictable, making it easy to understand the tool's function from its name alone.

Tool Count3/5

With only two tools, the server feels thin for a web search and content extraction domain. While the tools cover core workflows (search and extract), the scope might benefit from additional tools for tasks like filtering results, managing search history, or handling different content types.

Completeness4/5

The tool set covers the essential workflow of querying for information and extracting detailed content from URLs, with clear guidance on how to use them together. A minor gap is the lack of tools for advanced search parameters or content processing, but agents can effectively perform core tasks with the provided tools.

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/seekr-sh/mcp-server-seekr'

If you have feedback or need assistance with the MCP directory API, please join our Discord server