welance/directory

Match a project brief with small vetted software teams, anonymously; sign in to manage your own.

使うべきか

品質と安全性

B
説明の品質
92%
スキーマの完全性
65%
命名の品質
89%
ポイズニングのリスク
100%
権限の一致
100%
プロトコルへの準拠
100%

検出事項(4)

  • LOWTool 'directory_capabilities' description lacks action verbdirectory_capabilities 内
  • LOWTool 'read_profile' description lacks action verbread_profile 内
  • LOWTool 'read_brief' description lacks action verbread_brief 内
  • LOWTool 'read_booking' description lacks action verbread_booking 内

ツール定義とプロトコルへの準拠に関する自動分析に基づいています。

コンテキストコスト

~4,064トークン数(ツール定義)
~959 B一般的なレスポンスサイズ
注意への影響は大きい(128k コンテキストの 3.17%)

これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。

インストール

ワンクリックインストール

これを `claude_desktop_config.json` ファイルに追加してください:

{
  "mcpServers": {
    "directory": {
      "url": "https://welance.com/directory/mcp"
    }
  }
}

リモートエンドポイント

https://welance.com/directory/mcpstreamable-http

できること

ツール一覧

ツール(20)

🟢 読み取り専用🟡 書き込み🔴 削除⚪ 不明
🟢directory_capabilities

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.

入力スキーマ

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢list_open_briefs(status, tangible)

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.

入力スキーマ

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "open",
        "vetting",
        "executed"
      ]
    },
    "tangible": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
🟢preview_teams

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.

入力スキーマ

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢match_brief(brief, title, language)

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.

入力スキーマ

{
  "type": "object",
  "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"
    }
  },
  "required": [
    "brief"
  ],
  "additionalProperties": false
}
🟢brief_rules

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.

入力スキーマ

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢read_profile

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

入力スキーマ

{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
🟢read_my_teams

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.

入力スキーマ

{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
🟢read_my_pitches

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.

入力スキーマ

{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
🟢read_brief(briefId)

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

入力スキーマ

{
  "type": "object",
  "properties": {
    "briefId": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000000000000
    }
  },
  "required": [
    "briefId"
  ],
  "additionalProperties": false
}
🟢read_booking(bookingId)

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

入力スキーマ

{
  "type": "object",
  "properties": {
    "bookingId": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000000000000
    }
  },
  "required": [
    "bookingId"
  ],
  "additionalProperties": false
}
🟢read_pitchable_briefs

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.

入力スキーマ

{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
🟢read_invoices(identity, identities, from, to, limit)

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).

入力スキーマ

{
  "type": "object",
  "properties": {
    "identity": {
      "type": "string",
      "maxLength": 70,
      "minLength": 1
    },
    "identities": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 70,
        "minLength": 1
      },
      "maxItems": 10,
      "minItems": 1
    },
    "from": {
      "type": "string",
      "maxLength": 10
    },
    "to": {
      "type": "string",
      "maxLength": 10
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "required": [],
  "additionalProperties": false
}
🟡propose_brief_draft(title, markdown, answers, summary)

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.

入力スキーマ

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1
    },
    "markdown": {
      "type": "string",
      "maxLength": 100000,
      "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."
    }
  },
  "required": [
    "summary"
  ],
  "additionalProperties": false
}
🟡propose_brief_publish(title, markdown, language, summary)

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.

入力スキーマ

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1
    },
    "markdown": {
      "type": "string",
      "maxLength": 100000,
      "minLength": 40
    },
    "language": {
      "type": "string",
      "maxLength": 17
    },
    "summary": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "One sentence, in the conversation language, saying what happens on confirm."
    }
  },
  "required": [
    "title",
    "markdown",
    "summary"
  ],
  "additionalProperties": false
}
🟡propose_profile_update(entity, teamKey, memberKey, organisationId, changes, ...)

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.

入力スキーマ

{
  "type": "object",
  "properties": {
    "entity": {
      "type": "string",
      "enum": [
        "person",
        "member",
        "team",
        "organisation"
      ]
    },
    "teamKey": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1
    },
    "memberKey": {
      "type": "string",
      "maxLength": 40,
      "minLength": 3
    },
    "organisationId": {
      "type": "string",
      "maxLength": 255,
      "minLength": 1
    },
    "changes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "field": {
            "type": "string",
            "maxLength": 40,
            "minLength": 1
          },
          "value": {
            "description": "The new value (type depends on field)."
          },
          "inferred": {
            "type": "boolean",
            "description": "true when derived from evidence rather than stated by the person or the source"
          },
          "evidence": {
            "type": "string",
            "maxLength": 400,
            "description": "Minimal supporting excerpt, no contact data."
          },
          "attachmentId": {
            "type": "string",
            "maxLength": 120
          },
          "sourceId": {
            "type": "string",
            "maxLength": 120,
            "description": "The sourceId read_public_url returned, when the value comes from that site."
          }
        },
        "required": [
          "field",
          "value",
          "inferred"
        ],
        "additionalProperties": false
      },
      "maxItems": 7,
      "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
    },
    "addLangs": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 5
      },
      "maxItems": 8,
      "minItems": 1
    },
    "removeLangs": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 5
      },
      "maxItems": 8,
      "minItems": 1
    },
    "summary": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "One sentence, in the conversation language, saying what happens on confirm."
    }
  },
  "required": [
    "entity",
    "summary"
  ],
  "additionalProperties": false
}
🟡propose_team_invite(teamKey, name, email, role, summary)

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.

入力スキーマ

{
  "type": "object",
  "properties": {
    "teamKey": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1
    },
    "name": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1
    },
    "email": {
      "type": "string",
      "maxLength": 254
    },
    "role": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1
    },
    "summary": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "One sentence, in the conversation language, saying what happens on confirm."
    }
  },
  "required": [
    "teamKey",
    "name",
    "email",
    "summary"
  ],
  "additionalProperties": false
}
⚪propose_pitch_draft(briefId, teamKey, text, summary)

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.

入力スキーマ

{
  "type": "object",
  "properties": {
    "briefId": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000000000000
    },
    "teamKey": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1
    },
    "text": {
      "type": "string",
      "maxLength": 800,
      "minLength": 40,
      "description": "Anonymous: no names, emails, phone numbers or links."
    },
    "summary": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "One sentence, in the conversation language, saying what happens on confirm."
    }
  },
  "required": [
    "briefId",
    "teamKey",
    "text",
    "summary"
  ],
  "additionalProperties": false
}
🟡propose_pitch_send(briefId, teamKey, text, summary)

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.

入力スキーマ

{
  "type": "object",
  "properties": {
    "briefId": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000000000000
    },
    "teamKey": {
      "type": "string",
      "maxLength": 120,
      "minLength": 1
    },
    "text": {
      "type": "string",
      "maxLength": 800,
      "minLength": 40,
      "description": "Anonymous: no names, emails, phone numbers or links."
    },
    "summary": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "One sentence, in the conversation language, saying what happens on confirm."
    }
  },
  "required": [
    "briefId",
    "teamKey",
    "text",
    "summary"
  ],
  "additionalProperties": false
}
⚪propose_booking(appId, slots, note, summary)

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.

入力スキーマ

{
  "type": "object",
  "properties": {
    "appId": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000000000000
    },
    "slots": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 40
      },
      "maxItems": 10,
      "minItems": 3
    },
    "note": {
      "type": "string",
      "maxLength": 400
    },
    "summary": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "One sentence, in the conversation language, saying what happens on confirm."
    }
  },
  "required": [
    "appId",
    "slots",
    "summary"
  ],
  "additionalProperties": false
}
⚪propose_booking_accept(bookingId, slotId, summary)

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.

入力スキーマ

{
  "type": "object",
  "properties": {
    "bookingId": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000000000000
    },
    "slotId": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000000000000
    },
    "summary": {
      "type": "string",
      "maxLength": 300,
      "minLength": 3,
      "description": "One sentence, in the conversation language, saying what happens on confirm."
    }
  },
  "required": [
    "bookingId",
    "slotId",
    "summary"
  ],
  "additionalProperties": false
}

コミュニティ

このサーバーを評価する

エビデンス

最近の観測

検証済みバージョンは記録されていませんツール 20 件