README.md•4.23 kB
## Wikidata MCP Server
[](https://smithery.ai/server/@zzaebok/mcp-wikidata)
A server implementation for Wikidata API using the Model Context Protocol (MCP).
This project provides tools to interact with Wikidata, such as **searching identifiers** (entity and property), **extracting metadata** (label and description) and **executing sparql query**.
---
### Installation
#### Installing via Smithery
To install Wikidata MCP Server for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@zzaebok/mcp-wikidata):
```bash
npx -y @smithery/cli install @zzaebok/mcp-wikidata --client claude
```
#### Installing Manually
Install `uv` if it is not installed yet.
```bash
$ curl -LsSf https://astral.sh/uv/install.sh | sh
```
Then, install dependencies.
```bash
$ git clone https://github.com/zzaebok/mcp-wikidata.git
$ cd mcp-wikidata
$ uv sync
# if you want to run client example together
$ uv sync --extra example
```
---
### Run
Run the server with:
```bash
$ uv run src/server.py
```
If you want to test it with a simple client code (with `langchain-mcp-adapters`), run the client with:
```bash
# in another shell
$ uv run src/client.py
```
The LLM extracts valid entity and property identifiers, executes a sparql query, and finally recommend a movie directed by Bong Joon-ho.
<details>
<summary><i>See the execution output</i></summary>
```python
{
"messages": [
HumanMessage(
content="Can you recommend me a movie directed by Bong Joonho?",
),
AIMessage(
tool_calls=[
{
"name": "search_entity",
"args": {"query": "Bong Joon-ho"},
}
],
),
ToolMessage(
content="Q495980",
name="search_entity",
),
AIMessage(
tool_calls=[
{
"name": "get_properties",
"args": {"entity_id": "Q495980"},
}
],
),
ToolMessage(
content='["P345", "P244", "P214", "P227", ...]',
name="get_properties",
),
AIMessage(
tool_calls=[
{
"name": "search_property",
"args": {"query": "director"},
}
],
),
ToolMessage(
content="P57",
name="search_property",
),
AIMessage(
tool_calls=[
{
"name": "execute_sparql",
"args": {
"sparql_query": 'SELECT ?film ?filmLabel WHERE {\n ?film wdt:P57 wd:Q495980.\n SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }\n} LIMIT 1'
},
}
],
),
ToolMessage(
content='[{"film": {"type": "uri", "value": "http://www.wikidata.org/entity/Q483761"}, "filmLabel": {"xml:lang": "en", "type": "literal", "value": "Mother"}}]',
name="execute_sparql",
),
AIMessage(
content='I recommend the movie "Mother," which was directed by Bong Joon-ho.',
),
]
}
```
</details>
---
### Wikidata MCP Tools
The following tools are implemented in the server:
| Tool | Description |
| ---------------------------------------------------- | -------------------------------------------------------------------------- |
| `search_entity(query: str)` | Search for a Wikidata entity ID by its query. |
| `search_property(query: str)` | Search for a Wikidata property ID by its query. |
| `get_properties(entity_id: str)` | Get the properties associated with a given Wikidata entity ID. |
| `execute_sparql(sparql_query: str)` | Execute a SPARQL query on Wikidata. |
| `get_metadata(entity_id: str, language: str = "en")` | Retrieve the English label and description for a given Wikidata entity ID. |
---
#### License
MIT License