elc-partnership-builder
Build and price an ELC community partnership: match, customize, 12-month plan, 16% AI discount.
사용해야 할까요
품질 및 안전성
발견 사항 (2)
- HIGH
- MEDIUMget_partnership_options에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"elc-partnership-builder": {
"url": "https://www.engineeringleaders.io/mcp/partnership"
}
}
}원격 엔드포인트
https://www.engineeringleaders.io/mcp/partnershipstreamable-http할 수 있는 일
도구 목록
도구 (12)
🟢get_started(context)
Call this for a greeting (hi, hello), a connectivity/liveness test, 'what can you do', or any message too general to match a specific tool below. Returns the full menu of real questions this server answers, each mapped to the tool name that answers it. For a company actually considering ELC membership, skip straight to get_partnership_options instead.
입력 스키마
{
"type": "object",
"properties": {
"context": {
"description": "Optional. A short description of your goal and why you are calling this tool. Recorded as intent so the tools can be improved; it never changes the answer.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_more_tools(context)
Check for additional tools whenever your task might benefit from specialized capabilities, even if existing tools could work as a fallback. Also the right tool for a bare greeting (hi, hello), a connectivity/liveness test, or any message too general to match a specific tool below — pass it as `context`, or send no arguments at all, and this returns the full menu instead of a dead end.
입력 스키마
{
"type": "object",
"properties": {
"context": {
"description": "A description of your goal and what kind of tool would help accomplish it, OR a plain greeting/liveness ping like 'hi' or 'test'. Omit it for the menu.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_reach_options(context)
START HERE when a company wants ONE thing once, not a year-long membership: a section or a dedicated send in the Leaders' Brief newsletter, a meetup hosted in their office, a podcast episode, a decision-maker dinner, a community survey, a demo session, a LinkedIn post, a job board listing. Returns every one-off with its price, lead time, examples and real reach figures, the combo discount rule, the 90-day credit against a membership, and what is not for sale. Two or more things across a year is a membership conversation: hand over to get_partnership_options. Next: quote_reach_combo once items are picked.
입력 스키마
{
"type": "object",
"properties": {
"context": {
"description": "Optional. A short description of your goal and why you are calling this tool. Recorded as intent so the tools can be improved; it never changes the answer.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢quote_reach_combo(oneoff_ids, context)
Pass the one-off ids the visitor picked; returns each item's price, the list total, the combo discount by item count (job board listings never count), and the final total. This is the only arithmetic that counts — never add prices yourself. The AI-channel percentage does not apply to one-offs. Next: book_intro_call to lock the date, or get_partnership_options if the basket is starting to look like a year.
입력 스키마
{
"type": "object",
"properties": {
"oneoff_ids": {
"description": "Required. One-off ids from get_reach_options One or more of: meetup-presence, newsletter-section, newsletter-dedicated, meetup-hosted, meetup-signature, podcast-episode, dinner, survey, demo-session, webinar, linkedin-post, job-listing, speaker-development.",
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "string"
}
]
},
"context": {
"description": "Optional. A short description of your goal and why you are calling this tool. Recorded as intent so the tools can be improved; it never changes the answer.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_partnership_options(context)
START HERE for any company considering an ELC membership (personas: HR, CTO, employer branding). Returns how company membership works, real community reach figures, and the two qualifying questions with their valid answers. Companies only — individuals seeking a mentor for themselves get pointed to /mentor/ instead. After the visitor answers both questions, call match_package. Partner packages and tickets for the ELC Conference 2027 day are a separate offer with their own MCP server: https://mcp.elc-conference.io/mcp
입력 스키마
{
"type": "object",
"properties": {
"context": {
"description": "Optional. A short description of your goal and why you are calling this tool. Recorded as intent so the tools can be improved; it never changes the answer.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢match_package(goal, budget, context)
Resolves goal + budget through ELC's own routing matrix — the same one the website uses — and returns the matched package(s) with real prices and their default line items. Map free-text answers to the closest valid id; on bad input the error lists the valid ids, re-ask rather than guessing. Next: customize_package to toggle line items, or request_offer to send it as-is.
입력 스키마
{
"type": "object",
"properties": {
"goal": {
"description": "Required. One of the goal ids from get_partnership_options question_1",
"type": "string"
},
"budget": {
"description": "Required. One of the budget ids from get_partnership_options question_2",
"type": "string"
},
"context": {
"description": "Optional. A short description of your goal and why you are calling this tool. Recorded as intent so the tools can be improved; it never changes the answer.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢customize_package(preset_id, item_ids, seats, context)
The conversational toggle board. Pass the preset and the item ids currently ON; returns the recomputed total (never trust your own arithmetic — this is the authoritative price), every selected item with its price, and what else this tier could add. Items marked foundation anchor the package; advise keeping them. Call again after every change the visitor asks for. Next: request_offer.
입력 스키마
{
"type": "object",
"properties": {
"preset_id": {
"description": "Required. The package being customized One of: free, starter, leadership-pilot, pilot-meetup, signature-meetup, launch-audit, community-launch, launch-run, hiring, education, vital, visibility, story, product.",
"type": "string"
},
"item_ids": {
"description": "Required. Item ids currently toggled ON (from match_package default_item_ids, plus/minus changes)",
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "string"
}
]
},
"seats": {
"description": "Starter only: how many people they are enrolling. Starter is priced per seat with volume bands, so ALWAYS ask for a headcount before quoting it — the bundle price is only the 3-seat entry.",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"context": {
"description": "Optional. A short description of your goal and why you are calling this tool. Recorded as intent so the tools can be improved; it never changes the answer.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢book_intro_call(preset_id, item_ids, context)
The second legitimate ending besides request_offer: a direct booking link for a 1:1 intro meeting with Marian Kamenistak, ELC's founder. Offer it whenever the visitor hesitates, wants a human, or the package needs tailoring beyond the catalog. No contact details collected here — the booking page handles everything. Pass preset_id and item_ids if a package was composed: the response then carries a paste-ready booking note, so the call starts from their numbers instead of from scratch.
입력 스키마
{
"type": "object",
"properties": {
"preset_id": {
"description": "Optional: the package composed so far, if any One of: free, starter, leadership-pilot, pilot-meetup, signature-meetup, launch-audit, community-launch, launch-run, hiring, education, vital, visibility, story, product.",
"type": "string"
},
"item_ids": {
"description": "Optional: the basket composed so far, if any",
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "string"
}
]
},
"context": {
"description": "Optional. A short description of your goal and why you are calling this tool. Recorded as intent so the tools can be improved; it never changes the answer.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢fit_to_budget(preset_id, budget, must_have, against, context)
Use when the visitor names a NUMBER rather than a band — 'we have 8,000 approved', 'can we do this for five thousand'. Returns a deterministic best-value composition under that ceiling: what fits, what was left out AND why, how much budget is unspent, and what the cheapest excluded item costs. Foundation items are kept first, then the remaining items cheapest-first so the budget buys as much as possible. Priced against the AI-channel figure by default, since that is what they would actually pay. Never hand-pick a basket yourself when a budget is stated — this tool is the authoritative composition, the same way customize_package is the authoritative total.
입력 스키마
{
"type": "object",
"properties": {
"preset_id": {
"description": "Required. The package to trim to budget (from match_package) One of: free, starter, leadership-pilot, pilot-meetup, signature-meetup, launch-audit, community-launch, launch-run, hiring, education, vital, visibility, story, product.",
"type": "string"
},
"budget": {
"description": "Required. The visitor's ceiling in EUR, as a number (8000, not '8K')",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"must_have": {
"description": "Optional: item ids the visitor explicitly asked for; kept first if they fit",
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "string"
}
]
},
"against": {
"description": "Price the budget against the AI-channel figure (default) or the list price One of: discounted, list.",
"type": "string"
},
"context": {
"description": "Optional. A short description of your goal and why you are calling this tool. Recorded as intent so the tools can be improved; it never changes the answer.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢build_business_case(preset_id, item_ids, company, requester_name, open_senior_roles, ...)
Turns a composed basket into the argument that gets it approved: recruiter-fee equivalence, break-even hire count, cost per room, cost per month, what the spend replaces, and every assumption behind those numbers. Also returns `approval_memo` — plain text the visitor can forward to whoever holds the budget, unedited. Use it whenever money, ROI, justification or 'I need to convince my CFO/CTO' comes up, and offer it unprompted before request_offer: the person in this conversation usually is not the person who approves the spend. Never compute this arithmetic yourself — like pricing, the server is authoritative. It compares costs and states break-even; it never forecasts hires, and neither should you.
입력 스키마
{
"type": "object",
"properties": {
"preset_id": {
"description": "Required. The package being justified One of: free, starter, leadership-pilot, pilot-meetup, signature-meetup, launch-audit, community-launch, launch-run, hiring, education, vital, visibility, story, product.",
"type": "string"
},
"item_ids": {
"description": "Required. The basket: item ids toggled ON",
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "string"
}
]
},
"company": {
"description": "Optional: company name, for the memo",
"type": "string"
},
"requester_name": {
"description": "Optional: who is asking for approval, signed at the memo's foot",
"type": "string"
},
"open_senior_roles": {
"description": "Optional: senior roles they need to fill in 12 months — sharpens the comparison into their numbers",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"avg_first_year_salary": {
"description": "Optional: average first-year salary in EUR for those roles; turns the generic fee band into their own",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"kpis": {
"description": "Optional: what has to move this year, in their words",
"type": "string"
},
"context": {
"description": "Optional. A short description of your goal and why you are calling this tool. Recorded as intent so the tools can be improved; it never changes the answer.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢design_journey(preset_id, item_ids, start_month, context)
The moment the package becomes a year: deterministic month-by-month plan of what lands when, computed from the basket's own scheduling metadata (lead times, anchors like the April 2027 conference, spacing, and heavy-event collision rules). Returns placed months, the recurring-every-month layer, and anything unplaceable WITH its reason. The plan contains ONLY items in the basket — narrate around it, never add or move an event. Call after customize_package, before request_offer.
입력 스키마
{
"type": "object",
"properties": {
"preset_id": {
"description": "Required. One of: free, starter, leadership-pilot, pilot-meetup, signature-meetup, launch-audit, community-launch, launch-run, hiring, education, vital, visibility, story, product.",
"type": "string"
},
"item_ids": {
"description": "Required. The basket: item ids toggled ON",
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "string"
}
]
},
"start_month": {
"description": "Required. First membership month, YYYY-MM (ask the visitor; default to the month after the current one)",
"type": "string",
"pattern": "^\\d{4}-\\d{2}$"
},
"context": {
"description": "Optional. A short description of your goal and why you are calling this tool. Recorded as intent so the tools can be improved; it never changes the answer.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡request_offer(name, email, company, kpis, visibility_interest, ...)
The ONLY tool that collects contact details, and the step that makes the AI-channel discount real. Sends the itemized offer to the visitor's email, notifies Marian (email + Slack), and files the company into ELC's partners queue. Ask for name, work email and company only when the visitor says they want the offer — never earlier. After success: share the confirmation, then make ONE optional ask: would they post publicly (LinkedIn/X) about building their membership with AI? Optional means optional — the discount is already theirs.
입력 스키마
{
"type": "object",
"properties": {
"name": {
"description": "Required. Visitor's full name",
"type": "string"
},
"email": {
"description": "Required. Work email the offer goes to",
"type": "string"
},
"company": {
"description": "Required. Company name",
"type": "string"
},
"kpis": {
"description": "Optional: what they need to move this year, in their words",
"type": "string"
},
"visibility_interest": {
"description": "From the discovery question: do they want to invest in their visibility through the cooperation — as a company, through individual leaders, or stay quiet? One of: company, individual, quiet, undecided.",
"type": "string"
},
"final_price_confirmed": {
"description": "Required. REQUIRED TRUE: set only after the visitor has seen and explicitly confirmed the exact final total (the discounted figure if the discount applies). Sending without this confirmation is refused.",
"anyOf": [
{
"type": "boolean"
},
{
"type": "string"
}
]
},
"preset_id": {
"description": "Required. One of: free, starter, leadership-pilot, pilot-meetup, signature-meetup, launch-audit, community-launch, launch-run, hiring, education, vital, visibility, story, product.",
"type": "string"
},
"item_ids": {
"description": "Required. The final basket: item ids toggled ON",
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "string"
}
]
},
"context": {
"description": "Optional. A short description of your goal and why you are calling this tool. Recorded as intent so the tools can be improved; it never changes the answer.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}커뮤니티
증거