Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,8 @@ jobs:
run: go build -v ./...

- name: Build CLI tool
run: go build -v -o dropbox-mcp${{ matrix.os == 'windows-latest' && '.exe' || '' }} .
run: go build -v -o dropbox-mcp-server${{ matrix.os == 'windows-latest' && '.exe' || '' }} .

- name: Verify binary
run: ./dropbox-mcp${{ matrix.os == 'windows-latest' && '.exe' || '' }} -h || true
run: ./dropbox-mcp-server${{ matrix.os == 'windows-latest' && '.exe' || '' }} -h || true
shell: bash
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*.dll
*.so
*.dylib
dropbox-mcp
dropbox-mcp-server

# Test binary, built with `go test -c`
*.test
Expand Down
12 changes: 6 additions & 6 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# This is an example .goreleaser.yml file with some sensible defaults.
# Make sure to check the documentation at https://goreleaser.com
project_name: dropbox-mcp
project_name: dropbox-mcp-server

before:
hooks:
Expand All @@ -9,7 +9,7 @@ before:

builds:
- main: .
binary: dropbox-mcp
binary: dropbox-mcp-server
env:
- CGO_ENABLED=0
goos:
Expand Down Expand Up @@ -72,7 +72,7 @@ changelog:
release:
github:
owner: ngs
name: dropbox-mcp
name: dropbox-mcp-server
draft: false
prerelease: auto
name_template: "{{.ProjectName}} v{{.Version}}"
Expand All @@ -84,15 +84,15 @@ brews:
name: homebrew-tap
branch: main
directory: Formula
homepage: https://github.com/ngs/dropbox-mcp
homepage: https://github.com/ngs/dropbox-mcp-server
description: "MCP server for Dropbox integration"
license: MIT
test: |
system "#{bin}/dropbox-mcp -h"
system "#{bin}/dropbox-mcp-server -h"

nfpms:
- file_name_template: "{{ .ProjectName }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}"
homepage: https://github.com/ngs/dropbox-mcp
homepage: https://github.com/ngs/dropbox-mcp-server
description: "MCP server for Dropbox integration"
maintainer: Atsushi Nagase <a@ngs.io>
license: MIT
Expand Down
10 changes: 5 additions & 5 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ This is a Model Context Protocol (MCP) server for Dropbox integration, written i

## Project Structure
```
dropbox-mcp/
dropbox-mcp-server/
├── main.go # MCP server implementation with stdio transport
├── go.mod # Go module definition
├── internal/
Expand All @@ -23,7 +23,7 @@ dropbox-mcp/
- Implements OAuth 2.0 browser-based flow
- Opens local HTTP server to receive callback
- Handles token refresh automatically
- Stores tokens in `~/.dropbox-mcp/config.json`
- Stores tokens in `~/.dropbox-mcp-server/config.json`

### MCP Protocol (main.go)
- Uses stdio transport for communication
Expand Down Expand Up @@ -72,7 +72,7 @@ dropbox-mcp/

### Build
```bash
go build -o dropbox-mcp
go build -o dropbox-mcp-server
```

### Run Tests
Expand All @@ -83,7 +83,7 @@ go test ./...
### Manual Testing
```bash
# Test with direct stdio
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{}}}' | ./dropbox-mcp
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{}}}' | ./dropbox-mcp-server

# Check logs in Claude Desktop
tail -f ~/Library/Logs/Claude/mcp-server-dropbox.log
Expand All @@ -96,7 +96,7 @@ tail -f ~/Library/Logs/Claude/mcp-server-dropbox.log
- `DROPBOX_CLIENT_SECRET` - Dropbox App secret

### Config File
Location: `~/.dropbox-mcp/config.json`
Location: `~/.dropbox-mcp-server/config.json`
```json
{
"client_id": "...",
Expand Down
44 changes: 22 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,39 +23,39 @@ A Model Context Protocol (MCP) server implementation for Dropbox integration, wr

```bash
brew tap ngs/tap
brew install dropbox-mcp
brew install dropbox-mcp-server
```

### Option 2: Install with Go

```bash
go install go.ngs.io/dropbox-mcp@latest
go install go.ngs.io/dropbox-mcp-server@latest
```

### Option 3: Download Pre-built Binary

Download the latest release for your platform from the [releases page](https://github.com/ngs/dropbox-mcp/releases).
Download the latest release for your platform from the [releases page](https://github.com/ngs/dropbox-mcp-server/releases).

```bash
# Example for macOS (Apple Silicon)
curl -L https://github.com/ngs/dropbox-mcp/releases/latest/download/dropbox-mcp_darwin_arm64.tar.gz | tar xz
sudo mv dropbox-mcp /usr/local/bin/
curl -L https://github.com/ngs/dropbox-mcp-server/releases/latest/download/dropbox-mcp-server_darwin_arm64.tar.gz | tar xz
sudo mv dropbox-mcp-server /usr/local/bin/

# Example for macOS (Intel)
curl -L https://github.com/ngs/dropbox-mcp/releases/latest/download/dropbox-mcp_darwin_amd64.tar.gz | tar xz
sudo mv dropbox-mcp /usr/local/bin/
curl -L https://github.com/ngs/dropbox-mcp-server/releases/latest/download/dropbox-mcp-server_darwin_amd64.tar.gz | tar xz
sudo mv dropbox-mcp-server /usr/local/bin/

# Example for Linux (x86_64)
curl -L https://github.com/ngs/dropbox-mcp/releases/latest/download/dropbox-mcp_linux_amd64.tar.gz | tar xz
sudo mv dropbox-mcp /usr/local/bin/
curl -L https://github.com/ngs/dropbox-mcp-server/releases/latest/download/dropbox-mcp-server_linux_amd64.tar.gz | tar xz
sudo mv dropbox-mcp-server /usr/local/bin/
```

### Option 4: Build from Source

```bash
git clone https://github.com/ngs/dropbox-mcp.git
cd dropbox-mcp
go build -o dropbox-mcp
git clone https://github.com/ngs/dropbox-mcp-server.git
cd dropbox-mcp-server
go build -o dropbox-mcp-server
```

## Setup
Expand Down Expand Up @@ -91,12 +91,12 @@ If you have Claude MCP CLI installed, you can register the server with a single

```bash
# Basic registration (replace with YOUR OWN App credentials)
claude mcp add dropbox dropbox-mcp \
claude mcp add dropbox dropbox-mcp-server \
--env DROPBOX_CLIENT_ID=your_own_app_key \
--env DROPBOX_CLIENT_SECRET=your_own_app_secret

# With custom binary path
claude mcp add dropbox /path/to/dropbox-mcp \
claude mcp add dropbox /path/to/dropbox-mcp-server \
--env DROPBOX_CLIENT_ID=your_own_app_key \
--env DROPBOX_CLIENT_SECRET=your_own_app_secret
```
Expand All @@ -115,7 +115,7 @@ Add the following to your Claude Desktop configuration file:
{
"mcpServers": {
"dropbox": {
"command": "dropbox-mcp",
"command": "dropbox-mcp-server",
"env": {
"DROPBOX_CLIENT_ID": "your_app_key_here",
"DROPBOX_CLIENT_SECRET": "your_app_secret_here"
Expand All @@ -126,8 +126,8 @@ Add the following to your Claude Desktop configuration file:
```

**Note**:
- If you installed via Homebrew or placed the binary in `/usr/local/bin`, you can use just `"command": "dropbox-mcp"`
- If you built from source or downloaded to a custom location, use the full path: `"command": "/path/to/dropbox-mcp"`
- If you installed via Homebrew or placed the binary in `/usr/local/bin`, you can use just `"command": "dropbox-mcp-server"`
- If you built from source or downloaded to a custom location, use the full path: `"command": "/path/to/dropbox-mcp-server"`

### 3. Verify Installation

Expand All @@ -151,7 +151,7 @@ When you first use the Dropbox MCP server in Claude:
2. Your browser will open to Dropbox's authorization page
3. Log in and authorize the app
4. You'll be redirected to a success page
5. The authentication token will be saved to `~/.dropbox-mcp/config.json`
5. The authentication token will be saved to `~/.dropbox-mcp-server/config.json`

### Available Tools

Expand Down Expand Up @@ -192,7 +192,7 @@ When you first use the Dropbox MCP server in Claude:

## Configuration

The server stores configuration in `~/.dropbox-mcp/config.json`:
The server stores configuration in `~/.dropbox-mcp-server/config.json`:

```json
{
Expand All @@ -218,7 +218,7 @@ Tokens are automatically refreshed when they expire.
### Authentication Issues
- Ensure redirect URI is correctly configured in Dropbox App Console
- Check that client ID and secret are correct
- Try deleting `~/.dropbox-mcp/config.json` and re-authenticating
- Try deleting `~/.dropbox-mcp-server/config.json` and re-authenticating

### Permission Errors
- Verify your Dropbox app has the required scopes enabled
Expand All @@ -235,7 +235,7 @@ Tokens are automatically refreshed when they expire.

```bash
go mod download
go build -o dropbox-mcp
go build -o dropbox-mcp-server
```

### Running Tests
Expand All @@ -247,7 +247,7 @@ go test ./...
### Project Structure

```
dropbox-mcp/
dropbox-mcp-server/
├── main.go # MCP server implementation
├── go.mod # Go module definition
├── internal/
Expand Down
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ For public distribution without CLIENT_SECRET:
#### 3. Configuration File with Proper Permissions
Store credentials in a protected config file:
```bash
chmod 600 ~/.dropbox-mcp/config.json
chmod 600 ~/.dropbox-mcp-server/config.json
```

### For Developers
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module go.ngs.io/dropbox-mcp
module go.ngs.io/dropbox-mcp-server

go 1.21

Expand Down
2 changes: 1 addition & 1 deletion internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ func GetConfigPath() (string, error) {
if err != nil {
return "", fmt.Errorf("failed to get home directory: %w", err)
}
return filepath.Join(homeDir, ".dropbox-mcp", "config.json"), nil
return filepath.Join(homeDir, ".dropbox-mcp-server", "config.json"), nil
}

func Load() (*Config, error) {
Expand Down
4 changes: 2 additions & 2 deletions internal/dropbox/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import (
"github.com/dropbox/dropbox-sdk-go-unofficial/v6/dropbox"
"github.com/dropbox/dropbox-sdk-go-unofficial/v6/dropbox/files"
"github.com/dropbox/dropbox-sdk-go-unofficial/v6/dropbox/sharing"
"go.ngs.io/dropbox-mcp/internal/auth"
"go.ngs.io/dropbox-mcp/internal/config"
"go.ngs.io/dropbox-mcp-server/internal/auth"
"go.ngs.io/dropbox-mcp-server/internal/config"
)

type Client struct {
Expand Down
6 changes: 3 additions & 3 deletions internal/handlers/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import (

"github.com/dropbox/dropbox-sdk-go-unofficial/v6/dropbox/files"
"github.com/dropbox/dropbox-sdk-go-unofficial/v6/dropbox/sharing"
"go.ngs.io/dropbox-mcp/internal/auth"
"go.ngs.io/dropbox-mcp/internal/config"
"go.ngs.io/dropbox-mcp/internal/dropbox"
"go.ngs.io/dropbox-mcp-server/internal/auth"
"go.ngs.io/dropbox-mcp-server/internal/config"
"go.ngs.io/dropbox-mcp-server/internal/dropbox"
)

const (
Expand Down
14 changes: 7 additions & 7 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"os"
"strings"

"go.ngs.io/dropbox-mcp/internal/handlers"
"go.ngs.io/dropbox-mcp-server/internal/handlers"
)

var (
Expand Down Expand Up @@ -52,19 +52,19 @@ func main() {
flag.Parse()

if *versionFlag {
fmt.Printf("dropbox-mcp version %s (commit: %s, built: %s)\n", version, commit, date)
fmt.Printf("dropbox-mcp-server version %s (commit: %s, built: %s)\n", version, commit, date)
os.Exit(0)
}

if *helpFlag || *help2Flag {
fmt.Println("dropbox-mcp - MCP server for Dropbox integration")
fmt.Println("dropbox-mcp-server - MCP server for Dropbox integration")
fmt.Println("\nUsage:")
fmt.Println(" dropbox-mcp [options]")
fmt.Println(" dropbox-mcp-server [options]")
fmt.Println("\nOptions:")
fmt.Println(" -h, --help Show this help message")
fmt.Println(" --version Show version information")
fmt.Println("\nThis tool is designed to be used with Claude Desktop.")
fmt.Println("See https://github.com/ngs/dropbox-mcp for more information.")
fmt.Println("See https://github.com/ngs/dropbox-mcp-server for more information.")
os.Exit(0)
}

Expand Down Expand Up @@ -142,8 +142,8 @@ func handleInitialize() interface{} {
"tools": map[string]interface{}{},
},
"serverInfo": map[string]interface{}{
"name": "dropbox-mcp",
"version": "1.0.0",
"name": "dropbox-mcp-server",
"version": VERSION,
},
}
}
Expand Down
2 changes: 1 addition & 1 deletion mcp.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "dropbox-mcp",
"name": "dropbox-mcp-server",
"version": "1.0.0",
"description": "MCP server for Dropbox integration",
"author": "Atsushi Nagase",
Expand Down
3 changes: 3 additions & 0 deletions version.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package main

const VERSION = "0.1.0"
Loading