Skip to content

QuentinCody/wikidata-sparql-mcp-server

Repository files navigation

Wikidata SPARQL MCP Server

A Model Context Protocol (MCP) server providing access to the Wikidata knowledge graph via SPARQL queries. This server runs on Cloudflare Workers and supports both Server-Sent Events (SSE) and standard HTTP transport for remote MCP deployments.

Features

  • Single Unified Tool: One powerful sparql_query tool that handles both introspection and data queries
  • Comprehensive SPARQL Support: Execute any SPARQL query against Wikidata's knowledge graph
  • Multiple Output Formats: JSON, XML, Turtle, and CSV result formats
  • Timeout Protection: Configurable query timeouts (1-60 seconds) to prevent runaway queries
  • Remote Deployment: Deployed on Cloudflare Workers for global accessibility
  • Dual Transport Support: Both SSE and HTTP endpoints for maximum compatibility

Quick Start

Deploy to Cloudflare Workers

Deploy to Workers

This will deploy your MCP server to a URL like: wikidata-sparql-mcp-server.<your-account>.workers.dev/sse

Alternatively, clone and deploy manually:

git clone https://github.com/QuentinCody/wikidata-sparql-mcp-server.git
cd wikidata-sparql-mcp-server
npm install
npm run deploy

Local Development

npm install
npm start  # Runs on http://localhost:8787

MCP Tool Reference

sparql_query

Execute SPARQL queries against the Wikidata knowledge graph with support for both introspection and data retrieval.

Parameters:

  • query (string, required): The SPARQL query to execute
  • format (enum, optional): Output format - "json" (default), "xml", "turtle", or "csv"
  • timeout (number, optional): Query timeout in seconds (1-60, default: 30)

Example Queries:

Introspection Examples

# Describe what a human is in Wikidata
DESCRIBE wd:Q5

# Get all properties available for humans
SELECT DISTINCT ?property ?propertyLabel WHERE {
  wd:Q5 ?property ?value .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . }
}

Data Query Examples

# Get 10 famous scientists
SELECT ?scientist ?scientistLabel ?birthDate WHERE {
  ?scientist wdt:P31 wd:Q5 ;           # instance of human
             wdt:P106 wd:Q901 ;         # occupation: scientist
             wdt:P569 ?birthDate .      # birth date
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . }
} 
ORDER BY ?birthDate
LIMIT 10

# Find all programming languages and their creators
SELECT ?language ?languageLabel ?creator ?creatorLabel WHERE {
  ?language wdt:P31 wd:Q9143 ;         # instance of programming language
            wdt:P178 ?creator .         # developer
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . }
}
LIMIT 20

Boolean Check Examples

# Check if humans are living beings
ASK { wd:Q5 wdt:P279 wd:Q35120 }

# Check if a specific person exists
ASK { wd:Q937 ?p ?o }  # Albert Einstein

Client Configuration

Claude Desktop

Add this configuration to Claude Desktop's MCP settings:

{
  "mcpServers": {
    "wikidata-sparql": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://wikidata-sparql-mcp-server.<your-account>.workers.dev/sse"
      ]
    }
  }
}

Cloudflare AI Playground

  1. Go to https://playground.ai.cloudflare.com/
  2. Enter your deployed server URL: wikidata-sparql-mcp-server.<your-account>.workers.dev/sse
  3. Start querying the Wikidata knowledge graph!

Generic MCP Client

For any MCP client supporting HTTP/SSE transport:

  • SSE Endpoint: https://your-domain.workers.dev/sse
  • HTTP Endpoint: https://your-domain.workers.dev/mcp

SPARQL Query Examples by Use Case

Research & Academia

# Find Nobel Prize winners in Physics
SELECT ?winner ?winnerLabel ?year WHERE {
  ?award wdt:P31 wd:Q7191 ;            # Nobel Prize in Physics
         wdt:P585 ?year ;              # point in time
         wdt:P1346 ?winner .           # winner
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . }
}
ORDER BY DESC(?year)
LIMIT 10

Geography & Demographics

# Countries and their capitals
SELECT ?country ?countryLabel ?capital ?capitalLabel WHERE {
  ?country wdt:P31 wd:Q3624078 ;       # sovereign state
           wdt:P36 ?capital .          # capital
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . }
}
LIMIT 50

Technology & Innovation

# Software companies founded after 2000
SELECT ?company ?companyLabel ?founded WHERE {
  ?company wdt:P31 wd:Q936518 ;        # software company
           wdt:P571 ?founded .         # inception
  FILTER(YEAR(?founded) > 2000)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . }
}
ORDER BY DESC(?founded)
LIMIT 20

Error Handling

The server provides comprehensive error handling:

  • Timeout Protection: Queries exceeding the timeout limit are automatically aborted
  • SPARQL Validation: Invalid queries return descriptive error messages
  • Network Resilience: Handles Wikidata endpoint unavailability gracefully
  • Format Validation: Ensures output format compatibility

Architecture

  • Base: Cloudflare Workers with Durable Objects
  • MCP Framework: Model Context Protocol SDK with Cloudflare Agents
  • Transport: SSE (Server-Sent Events) and HTTP support
  • Query Engine: Direct integration with Wikidata's SPARQL endpoint

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test with various SPARQL queries
  5. Submit a pull request

License

MIT License - see LICENSE file for details

Related Resources

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published