Skip to main content
Glama
README.md
# TaskFlow: an MCP server powered by the Appwrite OAuth2 server

TaskFlow is a small task manager built on Appwrite. It ships a remote MCP server, hosted as an Appwrite Function, so AI tools like Claude Code can read and manage a user's tasks with the user's permission.

The interesting part is the auth. TaskFlow's Appwrite project acts as the OAuth2 server: AI clients register themselves, users approve access on a consent screen TaskFlow hosts, and the MCP server verifies the tokens the project issues. No API keys are handed out, and users can disconnect a tool at any time.

Companion repository for the Appwrite blog tutorial "Turn your app into an MCP server".

## Layout

```
apps/taskflow          The TaskFlow web app (TanStack Start): tasks, sign-in,
                       the OAuth2 consent screen, and a connected apps page.
functions/taskflow-mcp The MCP server, deployed as an Appwrite Function.
scripts                One-time database provisioning.
```

## Setup

1. Create an Appwrite project and copy `.env.example` to `.env` with your endpoint, project ID, an API key (scopes: `sessions.write`, `users.read`, `apps.read`, `databases.read`, `databases.write`, `tables.read`, `tables.write`), and a random session secret.
2. Install and provision the database:

   ```bash
   pnpm install
   pnpm provision
   ```

3. In the Console, open **Auth > OAuth2 server**, enable the server, set the authorization URL to `http://localhost:4100/oauth/consent`, and add the `tasks.read` and `tasks.write` scopes.
4. Deploy the web app and the MCP server (uses the [Appwrite CLI](https://appwrite.io/docs/tooling/command-line/installation)), then set the site's variables in the Console (same values as `.env`):

   ```bash
   appwrite login
   appwrite push site --site-id taskflow
   appwrite push function --function-id taskflow-mcp --activate
   ```

5. Update the OAuth2 server's authorization URL to `https://<SITE_DOMAIN>/oauth/consent`.

6. Connect from Claude Code, using the function's domain from the deploy output:

   ```bash
   claude mcp add --transport http taskflow https://<FUNCTION_DOMAIN>/mcp
   ```

   Run `/mcp` inside Claude Code and pick **Authenticate**. Sign in as a TaskFlow user, approve access, and ask Claude about your tasks.

## Live demo

The deployed result of this repository: the app at [taskflow.appwrite.network](https://taskflow.appwrite.network) and the MCP server at `https://taskflow-mcp.appwrite.network/mcp`. Create an account, connect Claude Code with the command above, and manage your tasks from the conversation.

Maintenance

ActivitySlowing
ResponsivenessNo issues