Rafał Doniec MCP
An MCP server operated by AI architect Rafał Doniec that allows AI agents to interact with his business services. It enables agents to list services, match client needs, estimate prices, and request quotes via email confirmation, facilitating automated client acquisition and service matching.
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.
https://www.rafaldoniec.com/mcpWhat you can do with it
- List available AI services and solutions
- Match client requirements to specific services
- Estimate project costs in PLN
- Request a quote with email code confirmation
Source and maintenance
Protocol and capabilities
- Server
- rafaldoniec 1.2.0
- MCP protocol
- 2025-06-18
- Tools
- 8 advertised
- Resources
- 1 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
},
"resources": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
8 advertised
list_services — List services
Rafał Doniec's services (AI automation, AI assistants, agent-ready companies, apps, strategy, prototypes, training, mentoring) with net price ranges in PLN and typical duration.
{
"type": "object",
"properties": {
"language": {
"enum": [
"pl",
"en"
],
"type": "string",
"description": "Language of the texts in the result. Default: en."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"services",
"currency",
"prices"
],
"properties": {
"prices": {
"type": "string"
},
"currency": {
"type": "string"
},
"services": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"summary",
"price_pln_net",
"weeks"
],
"properties": {
"id": {
"enum": [
"automatyzacja",
"asystent",
"agenci",
"aplikacja",
"strategia",
"prototyp",
"szkolenie",
"mentoring"
],
"type": "string"
},
"name": {
"type": "string"
},
"weeks": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 2,
"minItems": 2,
"description": "Shortest and longest duration in weeks."
},
"summary": {
"type": "string"
},
"price_pln_net": {
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "number"
},
"from": {
"type": "number"
}
}
}
}
}
}
}
}{
"readOnlyHint": true,
"openWorldHint": false
}match_service — Match a service to a description
Reads a client's need in their own words and suggests the service and the answers it mentions. Rules in code, no language model; check the result with the client.
{
"type": "object",
"required": [
"description"
],
"properties": {
"language": {
"enum": [
"pl",
"en"
],
"type": "string",
"description": "Language of the texts in the result. Default: en."
},
"description": {
"type": "string",
"maxLength": 500,
"minLength": 3,
"description": "The client's need in their own words (optional). Features it mentions, such as integrations, are priced in."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"service"
],
"properties": {
"name": {
"type": "string"
},
"answers": {
"type": "object",
"description": "Answers the description mentions, by question id (q1, q2, q3, when, budget).",
"additionalProperties": {
"type": "object",
"required": [
"id",
"label"
],
"properties": {
"id": {
"type": "string"
},
"label": {
"type": "string"
}
}
}
},
"service": {
"type": [
"string",
"null"
],
"description": "null when no service matched."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false
}get_quote_questions — Questions of a service
The five questions of a service with their option ids, as the quote assistant on the site asks them. q1–q3 set the price; when and budget set the start and the follow-up.
{
"type": "object",
"required": [
"service"
],
"properties": {
"service": {
"enum": [
"automatyzacja",
"asystent",
"agenci",
"aplikacja",
"strategia",
"prototyp",
"szkolenie",
"mentoring"
],
"type": "string",
"description": "Service id from list_services."
},
"language": {
"enum": [
"pl",
"en"
],
"type": "string",
"description": "Language of the texts in the result. Default: en."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"service",
"questions"
],
"properties": {
"service": {
"type": "string"
},
"questions": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"question",
"options"
],
"properties": {
"id": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"label"
],
"properties": {
"id": {
"type": "string"
},
"label": {
"type": "string"
}
}
}
},
"question": {
"type": "string"
}
}
}
}
}
}{
"readOnlyHint": true,
"openWorldHint": false
}estimate_price — Estimate the price
Net price range in PLN, monthly upkeep, duration and what the price is made of, for a service and its answers, computed from the price list in code (the same as the quote assistant on the site). With all five answers it also returns the draft offer. Hosts with MCP Apps show the estimate as an offer card.
{
"type": "object",
"required": [
"service",
"answers"
],
"properties": {
"answers": {
"type": "object",
"required": [
"q1",
"q2",
"q3"
],
"properties": {
"q1": {
"type": "string"
},
"q2": {
"type": "string"
},
"q3": {
"type": "string"
},
"when": {
"type": "string"
},
"budget": {
"type": "string"
}
},
"description": "Option ids chosen for the questions of the service (get_quote_questions): q1, q2, q3, when, budget.",
"additionalProperties": false
},
"service": {
"enum": [
"automatyzacja",
"asystent",
"agenci",
"aplikacja",
"strategia",
"prototyp",
"szkolenie",
"mentoring"
],
"type": "string",
"description": "Service id from list_services."
},
"language": {
"enum": [
"pl",
"en"
],
"type": "string",
"description": "Language of the texts in the result. Default: en."
},
"description": {
"type": "string",
"maxLength": 500,
"description": "The client's need in their own words (optional). Features it mentions, such as integrations, are priced in."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"service",
"service_name",
"language",
"price_pln_net",
"service_span_pln_net",
"upkeep_pln_net_per_month",
"weeks",
"breakdown",
"features_priced_in",
"draft_offer",
"note"
],
"properties": {
"note": {
"type": "string"
},
"weeks": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 2,
"minItems": 2,
"description": "Shortest and longest duration in weeks."
},
"service": {
"type": "string"
},
"language": {
"enum": [
"pl",
"en"
],
"type": "string"
},
"breakdown": {
"type": "array",
"items": {
"type": "object",
"required": [
"item",
"price_pln_net",
"upkeep_pln_net_per_month"
],
"properties": {
"item": {
"type": "string"
},
"price_pln_net": {
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "number"
},
"from": {
"type": "number"
}
}
},
"upkeep_pln_net_per_month": {
"type": [
"object",
"null"
],
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "number"
},
"from": {
"type": "number"
}
}
}
}
},
"description": "Elements of the price list behind the estimate; the total is rounded."
},
"draft_offer": {
"type": [
"string",
"null"
]
},
"service_name": {
"type": "string"
},
"price_pln_net": {
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "number"
},
"from": {
"type": "number"
}
}
},
"features_priced_in": {
"type": "array",
"items": {
"type": "string"
}
},
"service_span_pln_net": {
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "number"
},
"from": {
"type": "number"
}
},
"description": "Lowest and highest price of the service over all answers."
},
"upkeep_pln_net_per_month": {
"type": [
"object",
"null"
],
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "number"
},
"from": {
"type": "number"
}
}
}
}
}{
"readOnlyHint": true,
"openWorldHint": false
}request_quote — Request a quote (step 1: code)
Starts a quote request for the client: e-mails a 6-digit code to the client's address and returns a token. Ask the client for the code, then call confirm_quote with the same details. Nothing reaches Rafał until the code is confirmed.
{
"type": "object",
"required": [
"email",
"service",
"answers"
],
"properties": {
"email": {
"type": "string",
"description": "The client's e-mail address. A 6-digit code is sent there."
},
"answers": {
"type": "object",
"required": [
"q1",
"q2",
"q3",
"when",
"budget"
],
"properties": {
"q1": {
"type": "string"
},
"q2": {
"type": "string"
},
"q3": {
"type": "string"
},
"when": {
"type": "string"
},
"budget": {
"type": "string"
}
},
"description": "Option ids chosen for the questions of the service (get_quote_questions): q1, q2, q3, when, budget.",
"additionalProperties": false
},
"company": {
"type": "string",
"maxLength": 120,
"description": "Company name (optional)."
},
"service": {
"enum": [
"automatyzacja",
"asystent",
"agenci",
"aplikacja",
"strategia",
"prototyp",
"szkolenie",
"mentoring"
],
"type": "string",
"description": "Service id from list_services."
},
"language": {
"enum": [
"pl",
"en"
],
"type": "string",
"description": "Language of the texts in the result. Default: en."
},
"description": {
"type": "string",
"maxLength": 500,
"description": "The client's need in their own words (optional). Features it mentions, such as integrations, are priced in."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"token",
"code_valid_minutes"
],
"properties": {
"token": {
"type": "string",
"description": "Pass it to confirm_quote with the code."
},
"code_valid_minutes": {
"type": "number"
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}confirm_quote — Request a quote (step 2: confirm)
Confirms the quote request with the 6-digit code the client received. Rafał gets the request and the client gets a copy of the draft offer by e-mail. One request per address a day.
{
"type": "object",
"required": [
"email",
"service",
"answers",
"token",
"code"
],
"properties": {
"code": {
"type": "string",
"pattern": "^\\d{6}$",
"description": "The 6-digit code from the e-mail."
},
"email": {
"type": "string",
"description": "The client's e-mail address. A 6-digit code is sent there."
},
"token": {
"type": "string",
"description": "Token returned by request_quote."
},
"answers": {
"type": "object",
"required": [
"q1",
"q2",
"q3",
"when",
"budget"
],
"properties": {
"q1": {
"type": "string"
},
"q2": {
"type": "string"
},
"q3": {
"type": "string"
},
"when": {
"type": "string"
},
"budget": {
"type": "string"
}
},
"description": "Option ids chosen for the questions of the service (get_quote_questions): q1, q2, q3, when, budget.",
"additionalProperties": false
},
"company": {
"type": "string",
"maxLength": 120,
"description": "Company name (optional)."
},
"service": {
"enum": [
"automatyzacja",
"asystent",
"agenci",
"aplikacja",
"strategia",
"prototyp",
"szkolenie",
"mentoring"
],
"type": "string",
"description": "Service id from list_services."
},
"language": {
"enum": [
"pl",
"en"
],
"type": "string",
"description": "Language of the texts in the result. Default: en."
},
"description": {
"type": "string",
"maxLength": 500,
"description": "The client's need in their own words (optional). Features it mentions, such as integrations, are priced in."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"sent"
],
"properties": {
"sent": {
"type": "boolean"
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}list_blog_posts — Blog posts
Posts of Rafał Doniec's blog about AI in companies, newest first.
{
"type": "object",
"properties": {
"language": {
"enum": [
"pl",
"en"
],
"type": "string",
"description": "Language of the texts in the result. Default: en."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"posts",
"feed"
],
"properties": {
"feed": {
"type": "string"
},
"posts": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"url",
"summary",
"published"
],
"properties": {
"url": {
"type": "string"
},
"title": {
"type": "string"
},
"summary": {
"type": "string"
},
"published": {
"type": "string",
"description": "RFC 822 date from the feed."
}
}
}
},
"first_post_expected": {
"type": "string",
"description": "Date of the first post, while none is out yet."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false
}get_contact — Contact details
How to reach Rafał Doniec: e-mail, booking a call, LinkedIn, and the company details.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"required": [
"name",
"email",
"book_a_call",
"linkedin",
"location",
"company",
"website"
],
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"company": {
"type": "object",
"required": [
"name",
"nip",
"regon"
],
"properties": {
"nip": {
"type": "string"
},
"name": {
"type": "string"
},
"regon": {
"type": "string"
}
}
},
"website": {
"type": "string"
},
"linkedin": {
"type": "string"
},
"location": {
"type": "string"
},
"book_a_call": {
"type": "string"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false
}Prompts
Not advertised
Resources
1 advertised
offer-card — Offer card
Shows the result of estimate_price as a card: price range, duration, upkeep, breakdown.
ui://rafaldoniec/offer-card.html30-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
- 1573 ms
- 95th percentile latency
- 1573 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1573 ms · metadata changed · 8 tool(s), 1 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http rafa-doniec-mcp https://www.rafaldoniec.com/mcpCodex
codex mcp add rafa-doniec-mcp --url https://www.rafaldoniec.com/mcpCursor
{
"mcpServers": {
"rafa-doniec-mcp": {
"url": "https://www.rafaldoniec.com/mcp"
}
}
}Cline
{
"mcpServers": {
"rafa-doniec-mcp": {
"type": "streamableHttp",
"url": "https://www.rafaldoniec.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"rafa-doniec-mcp": {
"type": "http",
"url": "https://www.rafaldoniec.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http rafa-doniec-mcp https://www.rafaldoniec.com/mcpClaude Desktop
{
"mcpServers": {
"rafa-doniec-mcp": {
"url": "https://www.rafaldoniec.com/mcp"
}
}
}Windsurf
{
"mcpServers": {
"rafa-doniec-mcp": {
"serverUrl": "https://www.rafaldoniec.com/mcp"
}
}
}Let your agent find its tools
Find servers like Rafał Doniec MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other productivity and knowledge servers
Do you run Rafał Doniec 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.