login works, but not search
This commit is contained in:
commit
62cd8dea26
|
@ -0,0 +1,18 @@
|
|||
FROM python:3.13-slim
|
||||
|
||||
ARG VIKUNJA_URL
|
||||
ARG VIKUNJA_USERNAME
|
||||
ARG VIKUNJA_PASSWORD
|
||||
|
||||
ENV VIKUNJA_URL=$VIKUNJA_URL
|
||||
ENV VIKUNJA_USERNAME=$VIKUNJA_USERNAME
|
||||
ENV VIKUNJA_PASSWORD=$VIKUNJA_PASSWORD
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY requirements.txt requirements.txt
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
COPY . .
|
||||
|
||||
CMD ["python", "main.py"]
|
|
@ -0,0 +1,89 @@
|
|||
# Installation Guide for Vikunja MCP Server
|
||||
|
||||
This guide provides instructions for setting up and running the Vikunja MCP server locally.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Python 3.10 or newer
|
||||
- `pip` (Python's package installer)
|
||||
|
||||
## Setup Instructions
|
||||
|
||||
Follow these steps to get the application running.
|
||||
|
||||
**1. Create a Virtual Environment**
|
||||
|
||||
It is highly recommended to run this application in a Python virtual environment to avoid conflicts with system-wide packages.
|
||||
|
||||
Create the environment using the following command:
|
||||
```bash
|
||||
python3 -m venv .venv
|
||||
```
|
||||
|
||||
**2. Activate the Virtual Environment**
|
||||
|
||||
Before installing dependencies or running the application, you must activate the virtual environment.
|
||||
|
||||
* **On macOS and Linux:**
|
||||
```bash
|
||||
source .venv/bin/activate
|
||||
```
|
||||
|
||||
* **On Windows:**
|
||||
```bash
|
||||
.\.venv\Scripts\activate
|
||||
```
|
||||
|
||||
Your terminal prompt should change to indicate that you are now in the `.venv` environment.
|
||||
|
||||
**3. Install Dependencies**
|
||||
|
||||
With the virtual environment active, install the required Python packages from the `requirements.txt` file.
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
The application requires three environment variables to connect to your Vikunja instance. You must set these in your terminal before running the server.
|
||||
|
||||
Replace the placeholder values with your actual credentials.
|
||||
|
||||
```bash
|
||||
export VIKUNJA_URL="https://your-vikunja-instance.com"
|
||||
export VIKUNJA_USERNAME="your_username"
|
||||
export VIKUNJA_PASSWORD="your_password"
|
||||
```
|
||||
|
||||
**Note:** These variables are only set for the current terminal session. If you open a new terminal, you will need to set them again.
|
||||
|
||||
## Running the Application
|
||||
|
||||
Once the setup and configuration are complete, you can run the application with the following command:
|
||||
|
||||
```bash
|
||||
python main.py
|
||||
```
|
||||
|
||||
This will launch the interactive MCP shell.
|
||||
|
||||
## Usage
|
||||
|
||||
Here are the basic commands to get started:
|
||||
|
||||
1. **Log in** to your Vikunja instance:
|
||||
```
|
||||
> login
|
||||
```
|
||||
|
||||
2. **Search for tasks**:
|
||||
```
|
||||
> search_tasks "My search query"
|
||||
```
|
||||
|
||||
3. **Add a new task** to a project:
|
||||
```
|
||||
> add_task <project_id> "My new task title"
|
||||
```
|
||||
|
||||
You can type `help` at any time to see a full list of commands, or `help <command_name>` for details on a specific one. To close the application, type `exit`.
|
|
@ -0,0 +1,45 @@
|
|||
# Usage
|
||||
|
||||
This document provides instructions on how to add and use the Vikunja MCP server with the Gemini CLI.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before adding the MCP server, you need to set the following environment variables:
|
||||
|
||||
```bash
|
||||
export VIKUNJA_URL="<your_vikunja_url>"
|
||||
export VIKUNJA_USERNAME="<your_vikunja_username>"
|
||||
export VIKUNJA_PASSWORD="<your_vikunja_password>"
|
||||
```
|
||||
|
||||
## Adding the MCP Server
|
||||
|
||||
To add the Vikunja MCP server to the Gemini CLI, use the following command:
|
||||
|
||||
```bash
|
||||
gemini mcp add --name vikunja --command "python main.py"
|
||||
```
|
||||
|
||||
## Starting the MCP Server
|
||||
|
||||
To start the Vikunja MCP server, use the following command:
|
||||
|
||||
```bash
|
||||
gemini mcp start vikunja
|
||||
```
|
||||
|
||||
## Stopping the MCP Server
|
||||
|
||||
To stop the Vikunja MCP server, use the following command:
|
||||
|
||||
```bash
|
||||
gemini mcp stop vikunja
|
||||
```
|
||||
|
||||
## Removing the MCP Server
|
||||
|
||||
To remove the Vikunja MCP server from the Gemini CLI, use the following command:
|
||||
|
||||
```bash
|
||||
gemini mcp remove vikunja
|
||||
```
|
|
@ -0,0 +1,89 @@
|
|||
|
||||
import os
|
||||
import requests
|
||||
from fastmcp import FastMCP
|
||||
|
||||
# --- Configuration ---
|
||||
VIKUNJA_URL = os.getenv("VIKUNJA_URL")
|
||||
VIKUNJA_USERNAME = os.getenv("VIKUNJA_USERNAME")
|
||||
VIKUNJA_PASSWORD = os.getenv("VIKUNJA_PASSWORD")
|
||||
|
||||
# --- MCP Application Setup ---
|
||||
mcp = FastMCP()
|
||||
session = requests.Session()
|
||||
|
||||
# --- Input Validation ---
|
||||
if not all([VIKUNJA_URL, VIKUNJA_USERNAME, VIKUNJA_PASSWORD]):
|
||||
print("Error: Please set the VIKUNJA_URL, VIKUNJA_USERNAME, and VIKUNJA_PASSWORD environment variables.")
|
||||
exit(1)
|
||||
|
||||
@mcp.tool()
|
||||
def login():
|
||||
"""
|
||||
Authenticates with the Vikunja API to get a session token.
|
||||
"""
|
||||
global session
|
||||
try:
|
||||
response = session.post(
|
||||
f"{VIKUNJA_URL}/api/v1/login",
|
||||
json={"username": VIKUNJA_USERNAME, "password": VIKUNJA_PASSWORD}
|
||||
)
|
||||
response.raise_for_status()
|
||||
token = response.json().get("token")
|
||||
if not token:
|
||||
return "Login failed: Token not found in response."
|
||||
|
||||
session.headers.update({"Authorization": f"Bearer {token}"})
|
||||
return "Login successful. Token stored for session."
|
||||
except requests.exceptions.RequestException as e:
|
||||
return f"Login failed: {e}"
|
||||
|
||||
@mcp.tool()
|
||||
def search_tasks(query: str):
|
||||
"""
|
||||
Searches for tasks in Vikunja.
|
||||
|
||||
:param query: The search string to use for finding tasks.
|
||||
"""
|
||||
if "Authorization" not in session.headers:
|
||||
return "Please run the 'login' command first."
|
||||
|
||||
try:
|
||||
response = session.get(f"{VIKUNJA_URL}/api/v1/tasks/search?query={query}")
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
except requests.exceptions.RequestException as e:
|
||||
return f"Error searching tasks: {e}"
|
||||
|
||||
@mcp.tool()
|
||||
def add_task(project_id: int, title: str, description: str = ""):
|
||||
"""
|
||||
Adds a new task to a Vikunja project.
|
||||
|
||||
:param project_id: The ID of the project to add the task to.
|
||||
:param title: The title of the new task.
|
||||
:param description: An optional description for the task.
|
||||
"""
|
||||
if "Authorization" not in session.headers:
|
||||
return "Please run the 'login' command first."
|
||||
|
||||
task_payload = {
|
||||
"project_id": project_id,
|
||||
"title": title,
|
||||
"description": description
|
||||
}
|
||||
|
||||
try:
|
||||
response = session.post(
|
||||
f"{VIKUNJA_URL}/api/v1/projects/{project_id}/tasks",
|
||||
json=task_payload
|
||||
)
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
except requests.exceptions.RequestException as e:
|
||||
return f"Error adding task: {e}"
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("--- Vikunja MCP Client ---")
|
||||
print("Available commands: login, search_tasks, add_task, help, exit")
|
||||
mcp.run()
|
|
@ -0,0 +1,2 @@
|
|||
fastmcp
|
||||
requests
|
Loading…
Reference in New Issue