Metadata-Version: 2.4
Name: mcp-fider
Version: 2025.6.27.170000
Summary: MCP (Model Context Protocol) server for Fider API integration
Project-URL: Homepage, https://github.com/ringostat/fider-mcp
Project-URL: Issues, https://github.com/ringostat/fider-mcp/issues
Author-email: Ringostat <info@ringostat.com>
License: MIT
License-File: LICENSE
Requires-Python: >=3.8
Requires-Dist: aiohttp>=3.9.0
Description-Content-Type: text/markdown

# MCP Server for Fider

A Model Context Protocol (MCP) server that provides tools to interact with [Fider](https://getfider.com/) - an open-source customer feedback tool.

## Features

This MCP server provides the following tools:

**Posts:**
- **list_posts** - List posts with filtering options (search, view, limit, tags)
- **get_post** - Retrieve a specific post by number
- **create_post** - Create new posts (requires authentication)
- **edit_post** - Edit existing posts (requires collaborator/admin role)
- **delete_post** - Delete posts (requires admin role)
- **respond_to_post** - Change post status (open, planned, started, completed, declined, duplicate)

**Comments:**
- **list_comments** - List comments for a specific post
- **add_comment** - Add a comment to a post (requires authentication)
- **update_comment** - Update a comment (requires authentication and ownership)
- **delete_comment** - Delete a comment (requires authentication and ownership/admin)

**Tags:**
- **list_tags** - List all available tags
- **create_tag** - Create a new tag (requires admin role)
- **update_tag** - Update an existing tag (requires admin role)
- **delete_tag** - Delete a tag (requires admin role)
- **assign_tag** - Assign a tag to a post (requires collaborator/admin role)
- **unassign_tag** - Unassign a tag from a post (requires collaborator/admin role)

## Installation

### Using uvx (recommended - no installation needed!)

```bash
# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh

# Run directly from PyPI (once published)
uvx --from mcp-fider==2025.06.27.170000 --refresh-package mcp-fider mcp-fider

# Or run from GitHub directly
uvx --from git+https://github.com/ringostat/fider-mcp.git mcp-fider
```

### Using pip (if you prefer traditional method)

```bash
# Clone the repository
git clone https://github.com/ringostat/fider-mcp.git
cd fider-mcp

# Create a virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install the package
pip install -e .
```

## Configuration

The server requires the following environment variables:

- `FIDER_BASE_URL` or `FIDER_URL` - Your Fider instance URL (e.g., `https://feedback.example.com`)
- `FIDER_API_KEY` - Optional API key for authentication (required for creating, editing, and deleting posts)

### Getting a Fider API Key

1. Log in to your Fider instance as an administrator
2. Go to Settings → API
3. Generate a new API key
4. Copy the key and set it as the `FIDER_API_KEY` environment variable

## Usage

### With Claude Desktop

1. Add the server to your Claude Desktop configuration file:

   **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
   
   **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

2. Add the following configuration:

```json
{
  "mcpServers": {
    "fider": {
      "command": "uvx",
      "args": ["--from", "mcp-fider==2025.06.27.170000", 
               "--refresh-package", "mcp-fider", "mcp-fider"],
      "env": {
        "FIDER_BASE_URL": "https://your-fider-instance.com",
        "FIDER_API_KEY": "your-api-key-here"
      }
    }
  }
}
```

3. Restart Claude Desktop

### Running Directly

You can also run the server directly for testing:

```bash
# Set environment variables
export FIDER_BASE_URL="https://your-fider-instance.com"
export FIDER_API_KEY="your-api-key-here"

# Run from PyPI (once published)
uvx --from mcp-fider==2025.06.27.170000 --refresh-package mcp-fider mcp-fider

# Or run from GitHub directly
uvx --from git+https://github.com/ringostat/fider-mcp.git mcp-fider
```

## Development

### Running Tests

```bash
uv run pytest
```

### Code Formatting

```bash
uv run black .
uv run ruff check .
```

### Publishing to PyPI

```bash
# Build the package
uv build

# Publish to PyPI
uv publish
```

## Tool Descriptions

### list_posts

List posts from Fider with optional filtering.

Parameters:
- `query` (string) - Search keywords
- `view` (string) - Filter and order options: all, recent, my-votes, most-wanted, most-discussed, planned, started, completed, declined, trending
- `limit` (integer) - Number of entries to return (1-100, default: 30)
- `tags` (string) - Comma-separated list of tags to filter by

### get_post

Get a specific post by its number.

Parameters:
- `number` (integer, required) - The post number to retrieve

### create_post

Create a new post (requires authentication).

Parameters:
- `title` (string, required) - The title of the post
- `description` (string) - The description of the post

### edit_post

Edit an existing post (requires collaborator/admin role).

Parameters:
- `number` (integer, required) - The post number to edit
- `title` (string, required) - The new title of the post
- `description` (string) - The new description of the post

### delete_post

Delete a post (requires admin role).

Parameters:
- `number` (integer, required) - The post number to delete
- `reason` (string) - Reason for deletion

### respond_to_post

Respond to a post by changing its status (requires collaborator/admin role).

Parameters:
- `number` (integer, required) - The post number to respond to
- `status` (string, required) - The new status: open, planned, started, completed, declined, duplicate
- `text` (string) - Optional description of the status change
- `originalNumber` (integer) - Required when status is 'duplicate' - the post number to merge into

## Comment Tools

### list_comments

List comments for a specific post.

Parameters:
- `number` (integer, required) - The post number to get comments for

### add_comment

Add a comment to a post (requires authentication).

Parameters:
- `number` (integer, required) - The post number to comment on
- `content` (string, required) - The comment content

### update_comment

Update a comment (requires authentication and ownership).

Parameters:
- `post_number` (integer, required) - The post number
- `comment_id` (integer, required) - The comment ID to update
- `content` (string, required) - The new comment content

### delete_comment

Delete a comment (requires authentication and ownership/admin).

Parameters:
- `post_number` (integer, required) - The post number
- `comment_id` (integer, required) - The comment ID to delete

## Tag Tools

### list_tags

List all available tags.

Parameters: None

### create_tag

Create a new tag (requires admin role).

Parameters:
- `name` (string, required) - The tag name
- `color` (string, required) - The tag color (hex format, e.g., #FF0000)
- `isPublic` (boolean) - Whether the tag is public (default: true)

### update_tag

Update an existing tag (requires admin role).

Parameters:
- `slug` (string, required) - The tag slug to update
- `name` (string, required) - The new tag name
- `color` (string, required) - The new tag color (hex format, e.g., #FF0000)
- `isPublic` (boolean) - Whether the tag is public

### delete_tag

Delete a tag (requires admin role).

Parameters:
- `slug` (string, required) - The tag slug to delete

### assign_tag

Assign a tag to a post (requires collaborator/admin role).

Parameters:
- `post_number` (integer, required) - The post number
- `slug` (string, required) - The tag slug to assign

### unassign_tag

Unassign a tag from a post (requires collaborator/admin role).

Parameters:
- `post_number` (integer, required) - The post number
- `slug` (string, required) - The tag slug to unassign

## Troubleshooting

### Connection Issues

- Ensure your Fider instance is accessible from your network
- Check that the `FIDER_BASE_URL` is correct and doesn't have a trailing slash
- Verify your API key is valid if you're getting authentication errors

### Permission Errors

- Creating, editing, and deleting posts requires proper authentication
- Ensure your API key has the necessary permissions for the operations you're trying to perform

## License

MIT License - see LICENSE file for details

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.