This is a repository for the research project on the MCP server.

Features
- Work as an MCP server.
- Retrieve survey data from Notion.
- Create survey pages in Notion.
Prerequisites
- Python 3.12.1 or later
- uv 0.5.25 or later
- Claude Desktop Client
How to Use
- Clone the repository.
- Obtain a Notion token from Notion Integrations.
- Create a database page in Notion and retrieve the database ID. The database ID is the last part of the page URL.
- Create a
.env
file as shown below:
NOTION_TOKEN=[YOUR_NOTION_TOKEN]
NOTION_ROOT_DATABASE_ID=[YOUR_NOTION_DATABASE_ID]
- Add an MCP server definition to
claude_desktop.json
:
{
...
"mcpServers": {
"Research MCP Server": {
"command": "uv",
"args": [
"run",
"--with", "mcp[cli]",
"--with", "notion-client",
"--with", "pydantic",
"mcp",
"run",
"/path/to/research-mcp-server/server.py"
]
}
}
}
- Restart the Claude Desktop Client to launch the Research MCP Server.
- Ask Claude to perform a survey and review the results.
[
{
"description": "Get survey summaries",
"inputSchema": {
"properties": {},
"title": "get_survey_summariesArguments",
"type": "object"
},
"name": "get_survey_summaries"
},
{
"description": "Get survey summary",
"inputSchema": {
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
}
},
"required": [
"page_id"
],
"title": "get_survey_summaryArguments",
"type": "object"
},
"name": "get_survey_summary"
},
{
"description": "Get property definition for survey summary",
"inputSchema": {
"properties": {},
"title": "get_property_definitionArguments",
"type": "object"
},
"name": "get_property_definition"
},
{
"description": " Update survey summary property To know definition of properties, use `get_property_definition` tool in advance. ",
"inputSchema": {
"$defs": {
"SetPageProperty": {
"properties": {
"date_value": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Date Value, Only for date."
},
"multi_select_values": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Multi select property Value. they must be option ids. Only for multi_select."
},
"number_value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Number property value, Only for number."
},
"property_name": {
"title": "Property Name",
"type": "string"
},
"rich_text_value": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Rich text value. It must be a plain text. Only for rich_text."
},
"selection_value": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Selection property value. It must be an option id. Only for select."
},
"status_value": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Status property value. It must be an option id. Only for status."
},
"type": {
"title": "Type",
"type": "string"
}
},
"required": [
"property_name",
"type"
],
"title": "SetPageProperty",
"type": "object"
}
},
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
},
"updates": {
"items": {
"$ref": "#/$defs/SetPageProperty"
},
"title": "Updates",
"type": "array"
}
},
"required": [
"page_id",
"updates"
],
"title": "update_survey_summary_propertyArguments",
"type": "object"
},
"name": "update_survey_summary_property"
},
{
"description": "",
"inputSchema": {
"properties": {
"body": {
"title": "Body",
"type": "string"
},
"page_id": {
"title": "Page Id",
"type": "string"
}
},
"required": [
"page_id",
"body"
],
"title": "update_survey_summary_blockArguments",
"type": "object"
},
"name": "update_survey_summary_block"
},
{
"description": "",
"inputSchema": {
"properties": {
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Body"
},
"title": {
"title": "Title",
"type": "string"
}
},
"required": [
"title"
],
"title": "create_new_survey_summaryArguments",
"type": "object"
},
"name": "create_new_survey_summary"
}
]