Koskamo

welance/directory MCP

An MCP server operated by welance that allows AI agents to read public directory data (briefs, teams, rules) and, with user OAuth authentication, read the user's private directory profile and propose changes. It facilitates matching project briefs with vetted software teams by enabling agents to prepare briefs and proposals, while final actions like publishing, inviting, and paying remain manual user clicks on the website.

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.

welance/directory MCP logo, by welanceVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by welance
You need:no account, no key, no planOAuth sign-in by email; scopes directory:read and directory:propose
MCP endpoint (Streamable HTTP)
https://welance.com/directory/mcp
Vendor documentation

What you can do with it

  • Read public briefs, teams, and scoring rules
  • Read user's private profile, briefs, and bookings
  • Propose brief improvements or team matches for user confirmation

Source and maintenance

Vendor evidenceRegistry 1.1.0

Protocol and capabilities

Server
welance-directory 1.1.0
MCP protocol
2025-06-18
Tools
20 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

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

welance/directory, connected to one person (OAuth). Free: there are no plans and no credits. Public tools work without signing in; the read_* tools read the signed-in person's own directory (profile, teams, briefs, pitches, bookings, invoices) and the propose_* tools STORE a proposal the person reviews and confirms on welance.com/directory. Nothing is published, sent, invited, booked or paid by this connection: the only paid step is the €30 + VAT per-side meeting handshake, which the person completes on the website. Always end with the review link a tool returns. Teams stay anonymous until a mutual handshake.

Tools

20 advertised

directory_capabilities — What welance/directory is
Advertised by the server during the last successful anonymous check.
Advertised read-only

What the directory is, who it is for (small vetted software teams for digital projects, especially ones rooted in the physical world), how pricing works (0% of the project; €30 + VAT from each side only to meet, charged once both accept a time), and the rule that the human stays the principal.

directory_capabilities input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
directory_capabilities annotations
{
  "title": "What welance/directory is",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_open_briefs — Open briefs and delivered projects
Advertised by the server during the last successful anonymous check.
Advertised read-only

The public briefs: open ones looking for a team, ones in vetting, and the archive of delivered projects with budget, sector and delivery team. Anonymised server-side. Filter by status or to tangible-world projects only.

list_open_briefs input schema
{
  "type": "object",
  "properties": {
    "status": {
      "enum": [
        "open",
        "vetting",
        "executed"
      ],
      "type": "string"
    },
    "tangible": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
list_open_briefs annotations
{
  "title": "Open briefs and delivered projects",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
preview_teams — A protected preview of the team board
Advertised by the server during the last successful anonymous check.
Advertised read-only

Two anonymous, vetted teams as specimens (rotating daily) and the size of the supply — never the whole board. The board is brief-first: the teams that fit a project are listed only against a draft brief. Names and members are revealed only after a mutual €30-per-side handshake.

preview_teams input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
preview_teams annotations
{
  "title": "A protected preview of the team board",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
match_brief — Shortlist teams for a draft brief
Advertised by the server during the last successful anonymous check.
Advertised read-only

Match a draft brief (80–20000 characters) against the real, eligible anonymous teams: only teams the brief matches come back, with reasons and the defaults inferred from the brief. Same derivation and matcher as publishing, stores nothing, calls no LLM. Ends with a "Start this brief" link that opens the guided flow prefilled.

match_brief input schema
{
  "type": "object",
  "required": [
    "brief"
  ],
  "properties": {
    "brief": {
      "type": "string",
      "description": "The draft brief, markdown or plain text"
    },
    "title": {
      "type": "string"
    },
    "language": {
      "type": "string",
      "description": "ISO 639-1 language the team must speak"
    }
  },
  "additionalProperties": false
}
match_brief annotations
{
  "title": "Shortlist teams for a draft brief",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
brief_rules — The public scoring rules
Advertised by the server during the last successful anonymous check.
Advertised read-only

The rule catalogue a brief is scored against before teams see it: ids, labels, weights and the acceptance threshold that decides whether a brief publishes.

brief_rules input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
brief_rules annotations
{
  "title": "The public scoring rules",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
read_profile — My profile
Advertised by the server during the last successful anonymous check.
Advertised read-only

The signed-in person's own directory profile: job role, years of experience, languages, rated skills, hourly rate and verification state.

read_profile input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
read_profile annotations
{
  "title": "My profile",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
read_my_teams — My teams
Advertised by the server during the last successful anonymous check.
Advertised read-only

The signed-in person's teams: key (teamKey), name, and the facts the system derives rather than stores (members = confirmed people; rate = blended from members' rates unless the team sets an override; languages from members unless set); each team's profile (based, remote, availability, shipped work), open and matching brief counts, and a checklist of what pitching and the public board require, each marked met or missing.

read_my_teams input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
read_my_teams annotations
{
  "title": "My teams",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
read_my_pitches — My briefs, pitches and bookings
Advertised by the server during the last successful anonymous check.
Advertised read-only

The signed-in person's pitches and bookings on both sides: applications sent by their teams (with handshake and booking state) and the anonymous pitches received on their own briefs.

read_my_pitches input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
read_my_pitches annotations
{
  "title": "My briefs, pitches and bookings",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
read_brief — One brief
Advertised by the server during the last successful anonymous check.
Advertised read-only

One public brief in full, markdown body included, by its id (briefId).

read_brief input schema
{
  "type": "object",
  "required": [
    "briefId"
  ],
  "properties": {
    "briefId": {
      "type": "integer",
      "maximum": 1000000000000,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
read_brief annotations
{
  "title": "One brief",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
read_booking — One booking
Advertised by the server during the last successful anonymous check.
Advertised read-only

One booking by its id (bookingId): the proposed slots, its state, and which side the signed-in person is on.

read_booking input schema
{
  "type": "object",
  "required": [
    "bookingId"
  ],
  "properties": {
    "bookingId": {
      "type": "integer",
      "maximum": 1000000000000,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
read_booking annotations
{
  "title": "One booking",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
read_pitchable_briefs — Briefs my teams can pitch on
Advertised by the server during the last successful anonymous check.
Advertised read-only

For each of the signed-in person's teams, the open briefs that team can still pitch on: not yet pitched, pitch slots left, and a language match.

read_pitchable_briefs input schema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": false
}
read_pitchable_briefs annotations
{
  "title": "Briefs my teams can pitch on",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
read_invoices — My invoices
Advertised by the server during the last successful anonymous check.
Advertised read-only

The signed-in person's past invoices with their PDF and document links (pdfUrl / documentUrl). Without filters it covers every billing identity of the person (personal VAT plus companies they own or administer); each invoice is tagged with its identity {kind, id, label, vatMasked}. identity ("all", "personal" or "org:<organisationId>") or identities (several of "personal" / "org:<organisationId>") narrow by identity; from/to (YYYY-MM-DD, inclusive) narrow by date; limit caps the count (1–50).

read_invoices input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "to": {
      "type": "string",
      "maxLength": 10
    },
    "from": {
      "type": "string",
      "maxLength": 10
    },
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1
    },
    "identity": {
      "type": "string",
      "maxLength": 70,
      "minLength": 1
    },
    "identities": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 70,
        "minLength": 1
      },
      "maxItems": 10,
      "minItems": 1
    }
  },
  "additionalProperties": false
}
read_invoices annotations
{
  "title": "My invoices",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
propose_brief_draft — Propose a brief draft
Advertised by the server during the last successful anonymous check.

A proposed update to the person's local brief draft: title, markdown, and/or per-rule answers. Accepting it fills the brief editor; nothing is published. The whole proposal is limited to 64,000 UTF-8 bytes. Stores a proposal only. Nothing happens until the person confirms it on welance.com/directory; the result includes the review link.

propose_brief_draft input schema
{
  "type": "object",
  "required": [
    "summary"
  ],
  "properties": {
    "title": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1
    },
    "answers": {
      "type": "object",
      "additionalProperties": {
        "type": "string",
        "maxLength": 4000
      }
    },
    "summary": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "One sentence, in the conversation language, saying what happens on confirm."
    },
    "markdown": {
      "type": "string",
      "maxLength": 100000,
      "minLength": 1
    }
  },
  "additionalProperties": false
}
propose_brief_draft annotations
{
  "title": "Propose a brief draft",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
propose_brief_publish — Propose publishing a brief
Advertised by the server during the last successful anonymous check.

A proposal to publish a brief (title, markdown, optional language) to the board. On confirmation the server's live score gate decides whether it publishes; publishing emails a one-time link and signs no one in. The whole proposal is limited to 64,000 UTF-8 bytes. Stores a proposal only. Nothing happens until the person confirms it on welance.com/directory; the result includes the review link.

propose_brief_publish input schema
{
  "type": "object",
  "required": [
    "title",
    "markdown",
    "summary"
  ],
  "properties": {
    "title": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1
    },
    "summary": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "One sentence, in the conversation language, saying what happens on confirm."
    },
    "language": {
      "type": "string",
      "maxLength": 17
    },
    "markdown": {
      "type": "string",
      "maxLength": 100000,
      "minLength": 40
    }
  },
  "additionalProperties": false
}
propose_brief_publish annotations
{
  "title": "Propose publishing a brief",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
propose_profile_update — Propose profile changes
Advertised by the server during the last successful anonymous check.

Proposed field changes to one entity. entity "person": the signed-in person's own profile (job_role, years_experience, langs, skills, hourly_rate). entity "member" + teamKey + memberKey: a confirmed colleague on one of the person's teams (job_role, years_experience, langs, hourly_rate; skills are rated only by their owner). entity "team" + teamKey: intro, based, remote, availability, langs, shipped, hourly. entity "organisation" + organisationId: website, description of an organisation the person owns or administers (descriptive only; it verifies nothing). Skills: changes[{field:"skills", value:[{name, rating 1–10}]}] adds or re-rates (an existing name takes the new rating); removeSkills lists skill names to remove. Languages: addLangs / removeLangs take two-letter codes; alternatively a langs change carries the complete new list (not both). Scalars: changes[{field, value}]; hourly_rate is EUR/h, 10–2000; team hourly overrides the rate blended from members' rates, and null restores the blend; team size is not a field (it is the confirmed member count). Team shipped: value lists entries to add, each {title, url, desc}; existing entries are kept; removeShipped lists titles or links to remove. inferred=true marks a value derived from evidence rather than stated by the person; hourly rate, availability, languages and skill ratings are rejected when inferred. Each changed field becomes a separate card the person approves. Stores a proposal only. Nothing happens until the person confirms it on welance.com/directory; the result includes the review link.

propose_profile_update input schema
{
  "type": "object",
  "required": [
    "entity",
    "summary"
  ],
  "properties": {
    "entity": {
      "enum": [
        "person",
        "member",
        "team",
        "organisation"
      ],
      "type": "string"
    },
    "changes": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "field",
          "value",
          "inferred"
        ],
        "properties": {
          "field": {
            "type": "string",
            "maxLength": 40,
            "minLength": 1
          },
          "value": {
            "description": "The new value (type depends on field)."
          },
          "evidence": {
            "type": "string",
            "maxLength": 400,
            "description": "Minimal supporting excerpt, no contact data."
          },
          "inferred": {
            "type": "boolean",
            "description": "true when derived from evidence rather than stated by the person or the source"
          },
          "sourceId": {
            "type": "string",
            "maxLength": 120,
            "description": "The sourceId read_public_url returned, when the value comes from that site."
          },
          "attachmentId": {
            "type": "string",
            "maxLength": 120
          }
        },
        "additionalProperties": false
      },
      "maxItems": 7,
      "minItems": 1
    },
    "summary": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "One sentence, in the conversation language, saying what happens on confirm."
    },
    "teamKey": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1
    },
    "addLangs": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 5
      },
      "maxItems": 8,
      "minItems": 1
    },
    "memberKey": {
      "type": "string",
      "maxLength": 40,
      "minLength": 3
    },
    "removeLangs": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 5
      },
      "maxItems": 8,
      "minItems": 1
    },
    "removeSkills": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 120,
        "minLength": 1
      },
      "maxItems": 30,
      "minItems": 1
    },
    "removeShipped": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 300,
        "minLength": 1
      },
      "maxItems": 12,
      "minItems": 1
    },
    "organisationId": {
      "type": "string",
      "maxLength": 255,
      "minLength": 1
    }
  },
  "additionalProperties": false
}
propose_profile_update annotations
{
  "title": "Propose profile changes",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
propose_team_invite — Propose inviting someone to a team
Advertised by the server during the last successful anonymous check.

A proposal to invite a person to one of the signed-in person's teams (teamKey) by name and email, with an optional role. Once confirmed, the invitee receives an email; their skill ratings are theirs to set later. Stores a proposal only. Nothing happens until the person confirms it on welance.com/directory; the result includes the review link.

propose_team_invite input schema
{
  "type": "object",
  "required": [
    "teamKey",
    "name",
    "email",
    "summary"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1
    },
    "role": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1
    },
    "email": {
      "type": "string",
      "maxLength": 254
    },
    "summary": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "One sentence, in the conversation language, saying what happens on confirm."
    },
    "teamKey": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1
    }
  },
  "additionalProperties": false
}
propose_team_invite annotations
{
  "title": "Propose inviting someone to a team",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
propose_pitch_draft — Propose a pitch draft
Advertised by the server during the last successful anonymous check.

An anonymous pitch draft for one of the person's teams (teamKey) on an open brief (briefId). Accepting it fills the existing pitch editor; nothing is sent. Stores a proposal only. Nothing happens until the person confirms it on welance.com/directory; the result includes the review link.

propose_pitch_draft input schema
{
  "type": "object",
  "required": [
    "briefId",
    "teamKey",
    "text",
    "summary"
  ],
  "properties": {
    "text": {
      "type": "string",
      "maxLength": 800,
      "minLength": 40,
      "description": "Anonymous: no names, emails, phone numbers or links."
    },
    "briefId": {
      "type": "integer",
      "maximum": 1000000000000,
      "minimum": 1
    },
    "summary": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "One sentence, in the conversation language, saying what happens on confirm."
    },
    "teamKey": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1
    }
  },
  "additionalProperties": false
}
propose_pitch_draft annotations
{
  "title": "Propose a pitch draft",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
propose_pitch_send — Propose sending a pitch
Advertised by the server during the last successful anonymous check.

A proposal to send an anonymous pitch for one of the person's teams (teamKey) on an open brief (briefId); once confirmed, the brief owner sees it. Each brief accepts a limited number of pitches (10). Stores a proposal only. Nothing happens until the person confirms it on welance.com/directory; the result includes the review link.

propose_pitch_send input schema
{
  "type": "object",
  "required": [
    "briefId",
    "teamKey",
    "text",
    "summary"
  ],
  "properties": {
    "text": {
      "type": "string",
      "maxLength": 800,
      "minLength": 40,
      "description": "Anonymous: no names, emails, phone numbers or links."
    },
    "briefId": {
      "type": "integer",
      "maximum": 1000000000000,
      "minimum": 1
    },
    "summary": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "One sentence, in the conversation language, saying what happens on confirm."
    },
    "teamKey": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1
    }
  },
  "additionalProperties": false
}
propose_pitch_send annotations
{
  "title": "Propose sending a pitch",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
propose_booking — Propose meeting times
Advertised by the server during the last successful anonymous check.

As the client of a pitch on the person's own brief (appId): a proposed 30-minute call with at least 3 concrete slots (ISO 8601; weekdays, on the hour, 09–18 CET, 3–10 business days ahead) and an optional note. Confirming holds €30 from the client's side for up to 7 days; nothing is charged until both sides accept a time. A no-show's €30 is not returned; the side that showed gets a credit. Stores a proposal only. Nothing happens until the person confirms it on welance.com/directory; the result includes the review link.

propose_booking input schema
{
  "type": "object",
  "required": [
    "appId",
    "slots",
    "summary"
  ],
  "properties": {
    "note": {
      "type": "string",
      "maxLength": 400
    },
    "appId": {
      "type": "integer",
      "maximum": 1000000000000,
      "minimum": 1
    },
    "slots": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 40
      },
      "maxItems": 10,
      "minItems": 3
    },
    "summary": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "One sentence, in the conversation language, saying what happens on confirm."
    }
  },
  "additionalProperties": false
}
propose_booking annotations
{
  "title": "Propose meeting times",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
propose_booking_accept — Propose accepting a meeting time
Advertised by the server during the last successful anonymous check.

As the team on a booking (bookingId): a proposal to accept one of the client's offered slots (slotId). Accepting charges €30 from each side; if the client does not show, the team's €30 becomes a credit; if the team does not show, its €30 is not returned. Stores a proposal only. Nothing happens until the person confirms it on welance.com/directory; the result includes the review link.

propose_booking_accept input schema
{
  "type": "object",
  "required": [
    "bookingId",
    "slotId",
    "summary"
  ],
  "properties": {
    "slotId": {
      "type": "integer",
      "maximum": 1000000000000,
      "minimum": 1
    },
    "summary": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "One sentence, in the conversation language, saying what happens on confirm."
    },
    "bookingId": {
      "type": "integer",
      "maximum": 1000000000000,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
propose_booking_accept annotations
{
  "title": "Propose accepting a meeting time",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

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
1541 ms
95th percentile latency
1541 ms

Maintenance history

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

  • · probe · passed · 1541 ms · metadata changed · 20 tool(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 welance-directory-mcp https://welance.com/directory/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 welance-directory-mcp --url https://welance.com/directory/mcp

Cursor

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

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start welance-directory-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "welance-directory-mcp": {
      "type": "http",
      "url": "https://welance.com/directory/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 welance-directory-mcp https://welance.com/directory/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "welance-directory-mcp": {
      "url": "https://welance.com/directory/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": {
    "welance-directory-mcp": {
      "serverUrl": "https://welance.com/directory/mcp"
    }
  }
}

Let your agent find its tools

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

Do you run welance/directory MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing