Koskamo

Palim MCP

Palim is a hosted MCP memory server that stores sessions, decisions, and memories explicitly saved by agents, making them searchable across connected AI clients like ChatGPT, Claude, and Cursor. It provides cross-tool persistent context with EU hosting and keyword search capabilities.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Palim MCP logo, by PalimCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by Palim
You need:paid plan required (Plus/Team or current paid tier)
MCP endpoint (Streamable HTTP)
https://api.usepalim.com/mcp
Vendor documentation

What its tools do

11 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

11 of 11 have a description · 11 of 11 declare behavior hints · 11 of 11 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Save sessions and decisions for persistent context
  • Search saved memories across multiple AI clients
  • Continue Claude chats in Cursor with shared context
  • Sync ChatGPT context with Claude

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
palim 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
11 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
4 advertised
Server-advertised capabilities
{
  "tools": {},
  "prompts": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Palim is the user's persistent, cross-tool memory. Use it proactively — do not wait to be asked. DATA RESTRICTIONS: Before any save or retrieval, exclude personal data about anyone under 16 or a higher applicable age of digital consent, HIPAA Protected Health Information, PCI DSS-regulated payment card data, and adult content. If the request identifies such data, do not call a Palim tool with it or retrieve it into this client; explain the restriction and ask for a redacted version. Do not use broad searches to recover prohibited data. Other sensitive personal data requires a lawful basis and explicit consent where required. Follow the user's sharing choices. These instructions are not a server-side content filter. See https://www.usepalim.com/en/terms/ and /en/privacy/. RESUME FIRST: At the start of a new chat, call palim_resume (no arguments) before you answer. Continue that thread silently if it fits; ignore it if it does not. Later checkpoints pass continues_from with that session_id. ONE ROW PER CHAT: Reuse one session_id for every palim_checkpoint / palim_save_context in this chat. Claude Code/Codex: prefix claude-code- plus the client session id. SEARCH FIRST: For past work, decisions, or named projects, call palim_search or palim_get_context before answering. At the start of substantial project work, call palim_get_brain with no arguments. CHECKPOINT PROACTIVELY: After connecting, call palim_checkpoint first so Palim has something to recall. After later results and decisions, call palim_checkpoint or palim_save_context. Do not save trivia or secrets. palim_help lists additional tools that remain callable but are omitted from tools/list. MEMORIES: Durable facts, preferences, and standing decisions go to palim_add_memory.

Tools

11 advertised

palim_resume
Advertised by the server during the last successful anonymous check.
Advertised read-only

Continue the user's most recent Palim thread. Call first in a new chat, no args. Ignore the result if it is unrelated. Project filter is case-insensitive and returns the most recently updated match.

palim_resume input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "project": {
      "type": "string",
      "description": "Optional: only consider threads belonging to this project (case-insensitive; Logisoft ≡ logisoft)."
    },
    "tool_source": {
      "type": "string",
      "description": "Optional: only consider threads from one client (cursor, claude, codex, chatgpt, ...)."
    },
    "within_hours": {
      "type": "number",
      "description": "Optional: ignore threads older than this many hours. Omit to always return the latest thread."
    },
    "include_messages": {
      "type": "boolean",
      "description": "Optional: append the tail of the transcript when the thread has stored messages. Default false."
    }
  }
}
palim_resume output schema
{
  "type": "object",
  "required": [
    "message"
  ],
  "properties": {
    "message": {
      "type": "string",
      "description": "Human-readable tool result text."
    }
  },
  "additionalProperties": true
}
palim_resume annotations
{
  "title": "Resume",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
palim_checkpoint
Advertised by the server during the last successful anonymous check.

Call after connecting AND again after each meaningful chunk of work. Claude Code: reuse claude-code-<client session id>.

palim_checkpoint input schema
{
  "type": "object",
  "required": [
    "context"
  ],
  "properties": {
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional search tags."
    },
    "title": {
      "type": "string",
      "description": "Chat title when visible."
    },
    "origin": {
      "enum": [
        "human",
        "automation"
      ],
      "type": "string",
      "description": "human (default) or automation (hooks/cron)."
    },
    "status": {
      "type": "string",
      "description": "Optional status, e.g. laufend or abgeschlossen."
    },
    "context": {
      "type": "string",
      "description": "Handoff another AI can continue from: goal, state, constraints, next steps."
    },
    "project": {
      "type": "string",
      "description": "Optional project name."
    },
    "created_at": {
      "type": "string",
      "description": "Optional ISO 8601 chat date from the client."
    },
    "key_topics": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Main topics."
    },
    "open_items": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Open tasks."
    },
    "session_id": {
      "type": "string",
      "description": "Stable chat ID. Reuse it so checkpoints update one row. Claude Code/Codex: claude-code-<client session id>."
    },
    "source_urls": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional URLs."
    },
    "tool_source": {
      "type": "string",
      "description": "Client: cursor, claude, chatgpt, … Optional; defaults from the MCP client name, else unknown."
    },
    "continues_from": {
      "type": "string",
      "description": "Optional session_id from palim_resume that this chat continues."
    },
    "decisions_made": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Decisions in this chat."
    },
    "referenced_files": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Relevant files."
    },
    "resolved_open_items": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Previously open items that are now done; quote a leading fragment."
    }
  }
}
palim_checkpoint output schema
{
  "type": "object",
  "required": [
    "message"
  ],
  "properties": {
    "message": {
      "type": "string",
      "description": "Human-readable tool result text."
    }
  },
  "additionalProperties": true
}
palim_checkpoint annotations
{
  "title": "Checkpoint",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
palim_save_context
Advertised by the server during the last successful anonymous check.

Lightweight checkpoint: self-contained handoff, no transcript. Reuse session_id in this chat. Proactive after results and decisions, not only once.

palim_save_context input schema
{
  "type": "object",
  "required": [
    "context"
  ],
  "properties": {
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional search tags."
    },
    "title": {
      "type": "string",
      "description": "Chat title when visible."
    },
    "origin": {
      "enum": [
        "human",
        "automation"
      ],
      "type": "string",
      "description": "human (default) or automation (hooks/cron)."
    },
    "status": {
      "type": "string",
      "description": "Optional status, e.g. laufend or abgeschlossen."
    },
    "context": {
      "type": "string",
      "description": "Handoff another AI can continue from: goal, state, constraints, next steps."
    },
    "project": {
      "type": "string",
      "description": "Optional project name."
    },
    "created_at": {
      "type": "string",
      "description": "Optional ISO 8601 chat date from the client."
    },
    "key_topics": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Main topics."
    },
    "open_items": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Open tasks."
    },
    "session_id": {
      "type": "string",
      "description": "Stable chat ID. Reuse it so checkpoints update one row. Claude Code/Codex: claude-code-<client session id>."
    },
    "source_urls": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional URLs."
    },
    "tool_source": {
      "type": "string",
      "description": "Client: cursor, claude, chatgpt, … Optional; defaults from the MCP client name, else unknown."
    },
    "continues_from": {
      "type": "string",
      "description": "Optional session_id from palim_resume that this chat continues."
    },
    "decisions_made": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Decisions in this chat."
    },
    "referenced_files": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Relevant files."
    },
    "resolved_open_items": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Previously open items that are now done; quote a leading fragment."
    }
  }
}
palim_save_context output schema
{
  "type": "object",
  "required": [
    "message"
  ],
  "properties": {
    "message": {
      "type": "string",
      "description": "Human-readable tool result text."
    }
  },
  "additionalProperties": true
}
palim_save_context annotations
{
  "title": "Save context",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
palim_save_session
Advertised by the server during the last successful anonymous check.
Advertised destructive

Save or append a full chat transcript (messages + summary). Exclude children's personal data under 16/higher consent age, HIPAA PHI, PCI payment card data, and adult content; request redaction before saving. Prefer palim_save_context for compact handoffs. For metadata-only or URL updates use palim_update_session_metadata / palim_update_session_references. When appending: reuse session_id + title, fetch existing messages first, send only new ones. Always pass a complete summary and metadata.tool_source.

palim_save_session input schema
{
  "type": "object",
  "required": [
    "title",
    "messages"
  ],
  "properties": {
    "title": {
      "type": "string",
      "description": "Session title. Reuse across saves; else the exact chat title from the client UI."
    },
    "summary": {
      "type": "object",
      "required": [
        "summary_text",
        "key_topics",
        "open_items",
        "decisions_made",
        "referenced_files"
      ],
      "properties": {
        "key_topics": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "3-5 main topics discussed."
        },
        "open_items": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Open tasks or questions remaining."
        },
        "summary_text": {
          "type": "string",
          "description": "2-5 sentence summary of the entire conversation."
        },
        "user_insights": {
          "type": "object",
          "description": "Optional long-term profile patch only (relationships, life_phases, personality, preferences, interests, goals, employer/role/location). No filenames, paths, env vars, or session todos. See docs for field shapes."
        },
        "decisions_made": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Decisions reached during the conversation."
        },
        "referenced_files": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Files, paths, or key concepts referenced."
        },
        "resolved_open_items": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Prior open items now done (quote wording); moved into Resolved."
        }
      },
      "description": "Full-conversation summary. Required arrays may be empty."
    },
    "messages": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "role",
          "content"
        ],
        "properties": {
          "role": {
            "enum": [
              "user",
              "assistant",
              "system",
              "model"
            ],
            "type": "string",
            "description": "Sender role. \"model\" maps to \"assistant\"."
          },
          "content": {
            "type": "string",
            "description": "Message content"
          }
        }
      },
      "description": "Messages to save (role + content). When appending, only unsaved messages."
    },
    "metadata": {
      "type": "object",
      "required": [
        "tool_source"
      ],
      "properties": {
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "origin": {
          "enum": [
            "human",
            "automation"
          ],
          "type": "string",
          "description": "Producer: automation for cron/routines without a human; default human."
        },
        "status": {
          "type": "string",
          "description": "Lifecycle: laufend | abgeschlossen | referenz | archiviert."
        },
        "project": {
          "type": "string"
        },
        "source_urls": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Related URLs (chat link, sources)."
        },
        "tool_source": {
          "enum": [
            "cursor",
            "claude",
            "chatgpt",
            "gemini",
            "perplexity",
            "copilot",
            "bing",
            "web"
          ],
          "type": "string",
          "description": "AI platform this session originates from."
        }
      },
      "description": "Session metadata. tool_source is required."
    },
    "overwrite": {
      "type": "boolean",
      "description": "Replace all existing messages instead of appending. Default: false."
    },
    "created_at": {
      "type": "string",
      "description": "Optional ISO 8601 creation date from the AI client (new sessions only)."
    },
    "session_id": {
      "type": "string",
      "description": "Session id. Reuse across saves in this chat; else from chat URL or a new UUID."
    }
  }
}
palim_save_session output schema
{
  "type": "object",
  "required": [
    "message"
  ],
  "properties": {
    "message": {
      "type": "string",
      "description": "Human-readable tool result text."
    }
  },
  "additionalProperties": true
}
palim_save_session annotations
{
  "title": "Save session",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
palim_get_context
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get formatted context for a specific topic by searching and retrieving relevant sessions.

palim_get_context input schema
{
  "type": "object",
  "required": [
    "topic"
  ],
  "properties": {
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Filter by metadata tags (match any)."
    },
    "topic": {
      "type": "string",
      "description": "Topic to get context for."
    },
    "status": {
      "type": "string",
      "description": "Optional filter by metadata.status (e.g. \"laufend\", \"abgeschlossen\")."
    },
    "project": {
      "type": "string",
      "description": "Optional filter by project"
    },
    "max_sessions": {
      "type": "number",
      "default": 3,
      "description": "Maximum number of sessions to include (default: 3)"
    }
  }
}
palim_get_context output schema
{
  "type": "object",
  "required": [
    "message"
  ],
  "properties": {
    "message": {
      "type": "string",
      "description": "Human-readable tool result text."
    }
  },
  "additionalProperties": true
}
palim_get_context annotations
{
  "title": "Get context",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
palim_get_brain
Advertised by the server during the last successful anonymous check.
Advertised read-only

Distilled knowledge profile. No args: recent topic index (capped). With topic: full document. Pass limit for a larger or full index.

palim_get_brain input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "limit": {
      "type": "number",
      "description": "Max topics in the index (most recently updated first). Default 20 when omitted. Pass 0 for every topic."
    },
    "topic": {
      "type": "string",
      "description": "Optional topic slug or name. When set, returns the full topic document instead of the index."
    }
  }
}
palim_get_brain output schema
{
  "type": "object",
  "required": [
    "message"
  ],
  "properties": {
    "message": {
      "type": "string",
      "description": "Human-readable tool result text."
    }
  },
  "additionalProperties": true
}
palim_get_brain annotations
{
  "title": "Get brain",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
palim_search
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search saved sessions and memories. Query matches session text or memory content/id. Supports metadata filtering via tags/project/status/tool_source. Omit query for tags-only or project-only session filtering. Project match is case-insensitive.

palim_search input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Filter by metadata tags (match any)."
    },
    "limit": {
      "type": "number",
      "default": 5,
      "description": "Maximum number of results (default: 5)"
    },
    "query": {
      "type": "string",
      "description": "Keyword search query. Omit for tags-only or project-only filtering."
    },
    "status": {
      "type": "string",
      "description": "Optional filter by metadata.status (e.g. \"laufend\", \"abgeschlossen\", \"referenz\", \"archiviert\")."
    },
    "project": {
      "type": "string",
      "description": "Optional case-insensitive project filter (Logisoft ≡ logisoft). Allowed without query or tags."
    },
    "tool_source": {
      "type": "string",
      "description": "Optional explicit filter by tool source (cursor, claude, chatgpt, web, etc.)."
    }
  }
}
palim_search output schema
{
  "type": "object",
  "required": [
    "message"
  ],
  "properties": {
    "message": {
      "type": "string",
      "description": "Human-readable tool result text."
    }
  },
  "additionalProperties": true
}
palim_search annotations
{
  "title": "Search",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
palim_add_memory
Advertised by the server during the last successful anonymous check.

Store a memory, fact, decision, or preference for later retrieval.

palim_add_memory input schema
{
  "type": "object",
  "required": [
    "content",
    "type"
  ],
  "properties": {
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Tags for categorization"
    },
    "type": {
      "enum": [
        "fact",
        "decision",
        "preference",
        "insight",
        "note"
      ],
      "type": "string",
      "description": "Type of memory"
    },
    "content": {
      "type": "string",
      "description": "Content of the memory"
    },
    "metadata": {
      "type": "object",
      "description": "Additional metadata"
    },
    "source_session_id": {
      "type": "string",
      "description": "Optional reference to source session"
    }
  }
}
palim_add_memory output schema
{
  "type": "object",
  "required": [
    "message"
  ],
  "properties": {
    "message": {
      "type": "string",
      "description": "Human-readable tool result text."
    }
  },
  "additionalProperties": true
}
palim_add_memory annotations
{
  "title": "Add memory",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
palim_delete_memory
Advertised by the server during the last successful anonymous check.
Advertised destructive

Permanently delete one stored memory by ID. Use for user-requested cleanup or deletion; this cannot be undone.

palim_delete_memory input schema
{
  "type": "object",
  "required": [
    "memory_id"
  ],
  "properties": {
    "memory_id": {
      "type": "string",
      "description": "ID of the memory to permanently delete"
    }
  }
}
palim_delete_memory output schema
{
  "type": "object",
  "required": [
    "message"
  ],
  "properties": {
    "message": {
      "type": "string",
      "description": "Human-readable tool result text."
    }
  },
  "additionalProperties": true
}
palim_delete_memory annotations
{
  "title": "Delete memory",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
palim_delete_session
Advertised by the server during the last successful anonymous check.
Advertised destructive

Delete a chat session. Soft delete by default (reversible). Use hard_delete=true for permanent deletion.

palim_delete_session input schema
{
  "type": "object",
  "required": [
    "session_id"
  ],
  "properties": {
    "session_id": {
      "type": "string",
      "description": "The session ID to delete"
    },
    "hard_delete": {
      "type": "boolean",
      "default": false,
      "description": "If true, permanently deletes all data. Default: false (soft delete)."
    }
  }
}
palim_delete_session output schema
{
  "type": "object",
  "required": [
    "message"
  ],
  "properties": {
    "message": {
      "type": "string",
      "description": "Human-readable tool result text."
    }
  },
  "additionalProperties": true
}
palim_delete_session annotations
{
  "title": "Delete session",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
palim_help
Advertised by the server during the last successful anonymous check.
Advertised read-only

Show an overview of all available Palim tools and usage instructions.

palim_help input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "category": {
      "enum": [
        "all",
        "sessions",
        "search",
        "memory",
        "setup",
        "encryption"
      ],
      "type": "string",
      "description": "Filter by category. Default: all."
    }
  }
}
palim_help output schema
{
  "type": "object",
  "required": [
    "message"
  ],
  "properties": {
    "message": {
      "type": "string",
      "description": "Human-readable tool result text."
    }
  },
  "additionalProperties": true
}
palim_help annotations
{
  "title": "Help",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

4 advertised

resume_and_continue — Resume last thread

Advertised by the server during the last successful anonymous check.

Start a new chat by loading the latest Palim handoff and continuing that work without asking the user to summarise.

project
Optional project name to prefer when multiple recent threads exist.
checkpoint_chat — Checkpoint current chat

Advertised by the server during the last successful anonymous check.

Save a lightweight palim_save_context handoff for the current conversation so another client can continue.

session_id
Stable chat id to reuse across checkpoints in this conversation.
project
Optional project tag for the checkpoint.
search_past_work — Search past work

Advertised by the server during the last successful anonymous check.

Find prior decisions and sessions by topic and/or date range, then ground the answer in Palim results.

query
Topic or keywords to search (e.g. "auth flow", "Smithery"). (required)
date_from
Optional start date YYYY-MM-DD for date-range search.
date_to
Optional end date YYYY-MM-DD for date-range search.
save_durable_memory — Save durable memory

Advertised by the server during the last successful anonymous check.

Store a long-lived preference, fact, or standing decision with palim_add_memory (not a session transcript).

content
The durable fact or preference to remember. (required)
tags
Optional comma-separated tags.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1640 ms
95th percentile latency
1640 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1640 ms · metadata changed · 11 tool(s), 4 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http palim-mcp https://api.usepalim.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add palim-mcp --url https://api.usepalim.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable palim-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "palim-mcp": {
      "url": "https://api.usepalim.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "palim-mcp": {
      "type": "streamableHttp",
      "url": "https://api.usepalim.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start palim-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "palim-mcp": {
      "type": "http",
      "url": "https://api.usepalim.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http palim-mcp https://api.usepalim.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.usepalim.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "palim-mcp": {
      "serverUrl": "https://api.usepalim.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Palim MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.