mcp kibela

Local 2025-08-31 23:38:18 0
Knowledge And Memory @kj455/mcp-kibela

A Model Context Protocol server that enables AI assistants to search and access information stored in Kibela, supporting note search, retrieval, creation and updating.


smithery badge npm version License: MIT

A Model Context Protocol (MCP) server implementation that enables AI assistants to search and reference Kibela content. This setup allows AI models like Claude to securely access information stored in Kibela.

Features ?

The mcp-kibela server provides the following features:

  • Note Search: Search Kibela notes by keywords
  • My Notes: Fetch your latest notes
  • Note Content: Get note content and comments by ID
  • Note by Path: Get note content by path
  • Create Note: Create a new note
  • Update Note Content: Update note content by note id

Prerequisites ?

Before you begin, ensure you have:

  • Node.js (v18 or higher)
  • MCP Client (Claude Desktop, Cursor, etc.)
  • Kibela Access Token (How to get a token)
  • Git (if building from source)

Installation ?️

Usage with Cursor

{
  "kibela": {
    "command": "docker",
    "args": [
      "run",
      "-i",
      "--rm",
      "-e",
      "KIBELA_TEAM",
      "-e",
      "KIBELA_TOKEN",
      "ghcr.io/kj455/mcp-kibela:latest"
    ],
    "env": {
      "KIBELA_TEAM": "your-team-name from https://[team-name].kibe.la",
      "KIBELA_TOKEN": "your-token"
    }
  }
}

Usage with VSCode

{
  "mcp": {
    "inputs": [
      {
        "type": "promptString",
        "id": "kibela_team",
        "description": "Kibela team name",
        "password": false
      },
      {
        "type": "promptString",
        "id": "kibela_token",
        "description": "Kibela token",
        "password": true
      },
    ],
    "servers": {
      "kibela": {
        "command": "docker",
        "args": [
          "run",
          "-i",
          "--rm",
          "-e",
          "KIBELA_TEAM",
          "-e",
          "KIBELA_TOKEN",
          "ghcr.io/kj455/mcp-kibela:latest"
        ],
        "env": {
          "KIBELA_TEAM": "${input:kibela_team}",
          "KIBELA_TOKEN": "${input:kibela_token}"
        }
      }
    }
  }
}

Usage with Claude Desktop

{
  "mcpServers": {
    "mcp-kibela": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "KIBELA_TEAM",
        "-e",
        "KIBELA_TOKEN",
        "ghcr.io/kj455/mcp-kibela:latest"
      ],
      "env": {
        "KIBELA_TEAM": "your-team-name from https://[team-name].kibe.la",
        "KIBELA_TOKEN": "your-token"
      }
    }
  }
}

Using Smithery

npx -y @smithery/cli install @kj455/mcp-kibela --client claude

Environment Variables

The following environment variables are required:

  • KIBELA_TEAM: Your Kibela team name (required). You can find it from the URL of your Kibela team page. e.g. https://[team-name].kibe.la
  • KIBELA_TOKEN: Your Kibela API token (required)

Contributing

Any contributions are welcome!

Development

  1. Use npm run build:watch to build the project in watch mode.
npm run build:watch
  1. Use npx @modelcontextprotocol/inspector to inspect the MCP server.
npx @modelcontextprotocol/inspector node /path/to/mcp-kibela/dist/index.js

License ?

MIT

[
  {
    "description": "Search Kibela notes by query",
    "inputSchema": {
      "properties": {
        "query": {
          "description": "Search query",
          "type": "string"
        }
      },
      "required": [
        "query"
      ],
      "type": "object"
    },
    "name": "kibela_search_notes"
  },
  {
    "description": "Get my latest notes from Kibela",
    "inputSchema": {
      "properties": {
        "limit": {
          "default": 10,
          "description": "Maximum number of notes to fetch",
          "type": "number"
        }
      },
      "type": "object"
    },
    "name": "kibela_get_my_notes"
  },
  {
    "description": "Get note content by note ID",
    "inputSchema": {
      "properties": {
        "id": {
          "description": "Note ID",
          "type": "string"
        }
      },
      "required": [
        "id"
      ],
      "type": "object"
    },
    "name": "kibela_get_note_content"
  },
  {
    "description": "Get note content by note path",
    "inputSchema": {
      "properties": {
        "path": {
          "description": "Note path (e.g. /notes/123)",
          "type": "string"
        }
      },
      "required": [
        "path"
      ],
      "type": "object"
    },
    "name": "kibela_get_note_from_path"
  },
  {
    "description": "Update note content by note id. This tool allows you to modify the content of an existing Kibela note. Before updating, it fetches the current content of the note to ensure proper version control. Note that you need the note ID (not the note path) to use this tool.",
    "inputSchema": {
      "properties": {
        "content": {
          "description": "New content of the note in markdown format. The content will completely replace the existing note content. Make sure to include all necessary formatting, headers, and sections you want to preserve.",
          "type": "string"
        },
        "id": {
          "description": "Note id - not note path (e.g. /notes/123). If you want to update note content by note path, please use kibela_get_note_from_path tool first and get note id from the response",
          "type": "string"
        }
      },
      "required": [
        "id",
        "content"
      ],
      "type": "object"
    },
    "name": "kibela_update_note_content"
  },
  {
    "description": "Create a new note in Kibela.",
    "inputSchema": {
      "properties": {
        "authorId": {
          "description": "ID of the author of the note. If not specified, the note will be created by the authenticated user.",
          "type": "string"
        },
        "coediting": {
          "description": "required: Whether to enable co-editing for the note",
          "type": "boolean"
        },
        "content": {
          "description": "required: Content of the note in markdown format",
          "type": "string"
        },
        "draft": {
          "description": "Whether to create the note as a draft",
          "type": "boolean"
        },
        "folders": {
          "description": "IDs of the folders to add the note to.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "groupIds": {
          "description": "required: IDs of the groups to create the note in.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "title": {
          "description": "required: Title of the note",
          "type": "string"
        }
      },
      "required": [
        "title",
        "content"
      ],
      "type": "object"
    },
    "name": "kibela_create_note"
  }
]