OSF MCP Server
by SourceShift
README.md
# OSF MCP Server
An MCP (Model Context Protocol) server for interacting with the [Open Science Framework (OSF)](https://osf.io). Search projects, registrations, preprints, manage files, and more.
## Features
- **Search OSF Content**
- Projects (public and private with authentication)
- Registrations (pre-registered studies)
- Preprints (from OSF Preprints and partner services)
- **File Management**
- List project files
- Download files with PDF-to-Markdown conversion
- Read cached file content
- **Project Management** (requires authentication)
- Create new projects
- Update project metadata
- Access wiki content
- **DOI Resolution**
- Resolve OSF DOIs to resources
## Installation
```bash
# Clone the repository
cd tools/osf-mcp-server
# Create virtual environment
uv venv
source .venv/bin/activate
# Install with dependencies
uv pip install -e ".[test]"
```
## Configuration
### Environment Variables
| Variable | Description | Default |
|----------|-------------|---------|
| `OSF_TOKEN` | Personal Access Token for authenticated access | None (public only) |
| `OSF_STORAGE_PATH` | Path for downloaded files | `~/.osf-mcp-server/files` |
| `OSF_MAX_RESULTS` | Maximum search results | 50 |
| `OSF_REQUEST_TIMEOUT` | API timeout in seconds | 60 |
### Getting an OSF Token
1. Log in to [osf.io](https://osf.io)
2. Go to Settings → Personal Access Tokens
3. Create a new token with required scopes
4. Set `OSF_TOKEN` environment variable
```bash
export OSF_TOKEN="your_token_here"
```
## Usage
### Running the Server
```bash
# Run directly
python -m osf_mcp_server
# Or via entry point
osf-mcp-server
# With custom storage path
osf-mcp-server --storage-path /path/to/storage
```
### Claude Desktop Integration
Add to your Claude Desktop config (`claude_desktop_config.json`):
```json
{
"mcpServers": {
"osf": {
"command": "python",
"args": ["-m", "osf_mcp_server"],
"env": {
"OSF_TOKEN": "your_token_here"
}
}
}
}
```
Or with uv:
```json
{
"mcpServers": {
"osf": {
"command": "uv",
"args": [
"--directory", "/path/to/osf-mcp-server",
"run", "osf-mcp-server"
],
"env": {
"OSF_TOKEN": "your_token_here"
}
}
}
}
```
## Available Tools
### Search Tools
| Tool | Description |
|------|-------------|
| `search_projects` | Search for OSF projects by title, tags, category |
| `search_registrations` | Search for pre-registered studies |
| `search_preprints` | Search for preprints from OSF and partner services |
### Project Tools
| Tool | Description |
|------|-------------|
| `get_project` | Get detailed project information |
| `create_project` | Create a new project (auth required) |
| `update_project` | Update project metadata (auth required) |
### File Tools
| Tool | Description |
|------|-------------|
| `list_files` | List files and folders in a project |
| `download_file` | Download and cache a file locally |
| `read_file` | Read content of a downloaded file |
### Other Tools
| Tool | Description |
|------|-------------|
| `get_wiki` | List or get wiki page content |
| `resolve_doi` | Resolve an OSF DOI to a resource |
## Examples
### Search for Psychology Projects
```
Search for projects related to "cognitive bias":
- query: "cognitive bias"
- tags: ["psychology"]
- max_results: 20
```
### Download a Research Paper
```
1. Search for preprints: query="machine learning"
2. List project files: project_id="abc12"
3. Download PDF: file_id="xyz789"
4. Read content: file_id="xyz789"
```
### Create a New Project
```
Create project:
- title: "My Research Project"
- description: "A study on..."
- public: false
- tags: ["experiment", "2024"]
```
## Development
### Running Tests
```bash
# Run all tests
python -m pytest
# Run with coverage
python -m pytest --cov=osf_mcp_server
# Run specific test file
python -m pytest tests/test_search.py -v
```
### Code Formatting
```bash
# Format with black
black src/
# Lint with ruff
ruff check src/
```
## Architecture
```
osf-mcp-server/
├── src/osf_mcp_server/
│ ├── __init__.py # Entry point
│ ├── server.py # MCP server implementation
│ ├── config.py # Configuration settings
│ ├── osf_client.py # OSF API client
│ ├── tools/ # MCP tools
│ │ ├── search_*.py # Search tools
│ │ ├── *_file.py # File tools
│ │ └── ...
│ ├── resources/ # Resource management
│ │ └── osf_manager.py
│ └── prompts/ # Research prompts
│ └── research_prompts.py
└── tests/
```
## OSF API Reference
This server uses the [OSF API v2](https://developer.osf.io/). Key endpoints:
- `/nodes/` - Projects and components
- `/registrations/` - Pre-registered studies
- `/preprints/` - Preprints
- `/files/` - File operations
- `/wikis/` - Wiki pages
## License
MIT License
## Contributing
Contributions welcome! Please:
1. Fork the repository
2. Create a feature branch
3. Add tests for new functionality
4. Submit a pull requestThis server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues