Skip to main content
Glama

AFFiNE MCP Server

by DAWNCR0W
accessTokens.ts3 kB
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { GraphQLClient } from "../graphqlClient.js"; import { z } from "zod"; import { text } from "../util/mcp.js"; export function registerAccessTokenTools(server: McpServer, gql: GraphQLClient) { const listAccessTokensHandler = async () => { try { const query = `query { accessTokens { id name createdAt expiresAt } }`; const data = await gql.request<{ accessTokens: any[] }>(query); return text(data.accessTokens || []); } catch (error: any) { console.error("List access tokens error:", error.message); return text([]); } }; server.registerTool( "affine_list_access_tokens", { title: "List Access Tokens", description: "List personal access tokens (metadata).", inputSchema: {} }, listAccessTokensHandler as any ); server.registerTool( "list_access_tokens", { title: "List Access Tokens", description: "List personal access tokens (metadata).", inputSchema: {} }, listAccessTokensHandler as any ); const generateAccessTokenHandler = async (parsed: { name: string; expiresAt?: string }) => { const mutation = `mutation($input: GenerateAccessTokenInput!){ generateUserAccessToken(input:$input){ id name createdAt expiresAt token } }`; const data = await gql.request<{ generateUserAccessToken: any }>(mutation, { input: { name: parsed.name, expiresAt: parsed.expiresAt ?? null } }); return text(data.generateUserAccessToken); }; server.registerTool( "affine_generate_access_token", { title: "Generate Access Token", description: "Generate a personal access token (returns token).", inputSchema: { name: z.string(), expiresAt: z.string().optional() } }, generateAccessTokenHandler as any ); server.registerTool( "generate_access_token", { title: "Generate Access Token", description: "Generate a personal access token (returns token).", inputSchema: { name: z.string(), expiresAt: z.string().optional() } }, generateAccessTokenHandler as any ); const revokeAccessTokenHandler = async (parsed: { id: string }) => { const mutation = `mutation($id:String!){ revokeUserAccessToken(id:$id) }`; const data = await gql.request<{ revokeUserAccessToken: boolean }>(mutation, { id: parsed.id }); return text({ success: data.revokeUserAccessToken }); }; server.registerTool( "affine_revoke_access_token", { title: "Revoke Access Token", description: "Revoke a personal access token by id.", inputSchema: { id: z.string() } }, revokeAccessTokenHandler as any ); server.registerTool( "revoke_access_token", { title: "Revoke Access Token", description: "Revoke a personal access token by id.", inputSchema: { id: z.string() } }, revokeAccessTokenHandler as any ); }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DAWNCR0W/affine-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server