Ask a human expert MCP
An MCP server that allows AI agents to interact with a human expert for consultations on software, optimization, and AI. It enables agents to submit requests, pay via PayPal or crypto, and retrieve expert replies without email, supporting tools for terms, status, submission, and follow-ups.
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://cristiandesivo.com/mcpWhat you can do with it
- Submit a technical problem for expert consultation
- Pay for a response using PayPal or crypto
- Retrieve expert replies by request ID
- Send follow-up messages in a thread
Source and maintenance
Protocol and capabilities
- Server
- ask-a-human 1.0.0
- MCP protocol
- 2025-06-18
- Tools
- 6 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
6 advertised
get_terms — Offer terms
The offer's full terms, in English: who answers, what you get, the price, hours, when first replies come, the PayPal pay_url, the crypto option (25 USD in stablecoins, with my wallet addresses), how to submit a request, and my track record (where to read reviews from past clients, and case studies with summaries), and an example request with the kind of reply you get. Use it once, before your first submit_request: to decide whether this fits your problem and to learn how to pay. The terms rarely change, so there's no need to call it again in the same session. Not for live availability: whether I'm online now, paused or offering a free trial comes from get_status. Not needed for follow-ups or replies (send_followup, get_reply).
{
"type": "object",
"additionalProperties": false
}{
"type": "object",
"required": [
"what_you_get",
"summary_word_limit",
"price",
"hours",
"pay_url",
"request_steps"
],
"properties": {
"hours": {
"type": "string"
},
"price": {
"type": "object",
"required": [
"amount",
"currency"
],
"properties": {
"amount": {
"type": "number"
},
"currency": {
"type": "string"
}
}
},
"reply": {
"type": "object",
"description": "Reading my reply over plain HTTP, by request_id"
},
"crypto": {
"type": [
"object",
"null"
],
"description": "Paying in crypto: price, networks and my addresses (null if not offered)"
},
"submit": {
"type": "object",
"description": "The same request as a plain HTTP form/JSON POST"
},
"example": {
"type": "object",
"description": "A made-up sample request and the kind of reply I write"
},
"pay_url": {
"type": "string",
"description": "Where a human pays before submit_request"
},
"privacy": {
"type": "string",
"description": "The privacy policy: what's collected, why, and how long"
},
"good_fit": {
"type": "array",
"items": {
"type": "string"
}
},
"hours_et": {
"type": "object"
},
"hours_utc": {
"type": "object"
},
"not_a_fit": {
"type": "array",
"items": {
"type": "string"
}
},
"background": {
"type": "string"
},
"pay_by_api": {
"type": "string"
},
"credentials": {
"type": "object",
"description": "Track record: where to read reviews from past clients, and past work with one-line summaries"
},
"larger_work": {
"type": "string"
},
"open_to_any": {
"type": "string"
},
"who_answers": {
"type": "string"
},
"cancellation": {
"type": "string"
},
"paypal_email": {
"type": "string",
"description": "The PayPal account to send the payment to, e.g. with the Payouts API"
},
"summary_rule": {
"type": "string"
},
"what_you_get": {
"type": "string"
},
"request_email": {
"type": "string"
},
"request_steps": {
"type": "array",
"items": {
"type": "string"
}
},
"note_for_agents": {
"type": "string"
},
"first_reply_online": {
"type": "string"
},
"summary_word_limit": {
"type": "integer"
},
"first_reply_offline": {
"type": "string"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false
}get_status — Online status
Whether I'm online right now (first reply within 15 minutes) or when I'm back (next_online_utc), whether requests are paused, and whether you've been awarded a free trial right now (then no payment or transaction_id is needed). Changes over time: call it right before paying and submitting, so you don't pay while requests are paused, and to know when to expect the reply. For the price, how to pay and what you get, use get_terms; to check on a request already sent, use get_reply.
{
"type": "object",
"additionalProperties": false
}{
"type": "object",
"required": [
"online",
"paused",
"next_online_utc",
"checked_at_utc",
"free_trial",
"first_reply",
"note"
],
"properties": {
"note": {
"type": "string"
},
"online": {
"type": "boolean",
"description": "Online now: first reply within 15 minutes"
},
"paused": {
"type": "boolean",
"description": "Not taking requests right now"
},
"free_trial": {
"type": "boolean",
"description": "You've been awarded a free trial: no payment, no transaction_id"
},
"first_reply": {
"type": "string",
"description": "When the first reply comes if you submit now"
},
"checked_at_utc": {
"type": "string"
},
"next_online_utc": {
"type": [
"string",
"null"
],
"description": "When offline: when I'm back"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false
}submit_request — Ask a human expert
Send a problem to Cristian Desivo, a human expert, for his most creative solution idea. Payment first: unless get_status shows free_trial, pay 20 USD by PayPal, either at https://paypal.me/CristianDesivo/20USD or by sending it to cdesivo92@gmail.com (an agent with PayPal API access, for example the Payouts API, can do this on its own), then pass the PayPal transaction ID; this tool takes no payments. Or pay 25 USDT on TRON (TRC-20) from a crypto wallet (the address is in get_terms) and pass crypto_tx and network instead of transaction_id: the transfer is checked on the chain right away. The summary is all I read for the first reply (300 words at most). I write the reply myself: within 15 minutes while I'm online, otherwise by 09:30 UTC. It's emailed to reply_email, and you can read it here with get_reply and the request_id this tool returns. A confirmation email goes to reply_email right away. At most 5 requests per hour from one address. Requests can't be cancelled once submitted; if I can't help with it, I'll say so in my reply.
{
"type": "object",
"required": [
"reply_email",
"summary"
],
"properties": {
"name": {
"type": "string",
"description": "Optional: your or your user's name"
},
"network": {
"enum": [
"tron"
],
"type": "string",
"description": "With crypto_tx: the network the transfer was made on"
},
"summary": {
"type": "string",
"description": "The problem in 300 words or fewer: what it is, what has been tried, the key constraints, and the deadline"
},
"crypto_tx": {
"type": "string",
"description": "Paying in crypto: the transaction hash of the transfer to my address (see crypto in get_terms), instead of transaction_id"
},
"payer_email": {
"type": "string",
"description": "Optional: the email of the PayPal account that paid, in case PayPal shows different transaction IDs"
},
"paypal_name": {
"type": "string",
"description": "Optional: the name on the PayPal account that paid, for the same reason"
},
"reply_email": {
"type": "string",
"description": "Where the confirmation and my reply go"
},
"transaction_id": {
"type": "string",
"description": "The PayPal transaction ID (17 letters and digits) of the payment made at pay_url or sent by PayPal to paypal_email. Required unless get_status shows free_trial or you pay in crypto (crypto_tx)"
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"received"
],
"properties": {
"errors": {
"type": "object",
"description": "When not sent: the problem with each field (or 'form')",
"additionalProperties": {
"type": "string"
}
},
"received": {
"type": "boolean",
"description": "True if the request was sent"
},
"reply_to": {
"type": "string"
},
"get_reply": {
"type": "string",
"description": "The same check over plain HTTP (GET)"
},
"request_id": {
"type": "string",
"description": "Pass it to get_reply to read my reply"
},
"first_reply": {
"type": "string"
},
"confirmation": {
"type": "string"
},
"transaction_id": {
"type": "string"
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}get_reply — Read my reply
My reply to a request you submitted, by the request_id submit_request returned (ask- followed by 24 letters, digits, - or _). status is 'waiting' until I've replied, with a note saying when to expect it, then 'replied' with the text, oldest first; later replies in the same thread are included. Check every few minutes, not in a tight loop: at most 120 checks per hour from one address. A malformed request_id is an error; a well-formed one I haven't answered yet is just 'waiting'. If you lost the request_id, use find_request; to reply to my answer, use send_followup. The same reply is also emailed to reply_email.
{
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string",
"pattern": "^ask-[A-Za-z0-9_-]{24}$",
"description": "The request_id submit_request (or find_request) returned, like ask-alWy4XCpgAW3eZUgwnRTCmQ2"
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"note": {
"type": "string"
},
"error": {
"type": "string"
},
"status": {
"enum": [
"waiting",
"replied"
],
"type": "string"
},
"replies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"sent_at_utc": {
"type": [
"string",
"null"
]
}
}
}
},
"request_id": {
"type": "string"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false
}send_followup — Follow up on a request
Send a follow-up in the thread of a request you submitted: answer a question I asked, add a detail I need, or ask the next question about the same problem. No new payment. Write it to stand on its own (I read it next to the thread, not in your session): say what changed or what you tried since my reply. The request_id must be one submit_request returned; an unknown one is refused and nothing is sent. My answer comes the same way as the first (get_reply, and email to reply_email). 300 words at most; at most 10 follow-ups per hour from one address. A new problem is a new request (submit_request).
{
"type": "object",
"required": [
"request_id",
"message"
],
"properties": {
"message": {
"type": "string",
"minLength": 1,
"description": "Your follow-up, as plain text: an answer to my question, a clarification or a next question, written to stand on its own, 300 words or fewer"
},
"request_id": {
"type": "string",
"pattern": "^ask-[A-Za-z0-9_-]{24}$",
"description": "The request_id submit_request (or find_request) returned, like ask-alWy4XCpgAW3eZUgwnRTCmQ2"
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"sent"
],
"properties": {
"note": {
"type": "string"
},
"sent": {
"type": "boolean"
},
"error": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}find_request — Recover a request_id
Lost the request_id of a request you submitted? Give the payment's transaction ID (PayPal ID or crypto hash) and the reply_email you used, and get the request_id back for get_reply and send_followup. Both must match the same request: if either doesn't, the answer is found: false, without saying which one was wrong. Case and spacing in the transaction ID don't matter. It's also in the confirmation email. At most 20 lookups per hour from one address.
{
"type": "object",
"required": [
"transaction_id",
"reply_email"
],
"properties": {
"reply_email": {
"type": "string",
"description": "The reply_email you submitted the request with"
},
"transaction_id": {
"type": "string",
"description": "The payment's transaction ID: the PayPal ID, or the crypto hash you passed as crypto_tx"
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"found"
],
"properties": {
"error": {
"type": "string"
},
"found": {
"type": "boolean"
},
"get_reply": {
"type": "string"
},
"request_id": {
"type": "string"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false
}Prompts
Not advertised
Resources
Not advertised
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
- 391 ms
- 95th percentile latency
- 391 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 391 ms · metadata changed · 6 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http ask-a-human-expert-mcp https://cristiandesivo.com/mcpCodex
codex mcp add ask-a-human-expert-mcp --url https://cristiandesivo.com/mcpCursor
{
"mcpServers": {
"ask-a-human-expert-mcp": {
"url": "https://cristiandesivo.com/mcp"
}
}
}Cline
{
"mcpServers": {
"ask-a-human-expert-mcp": {
"type": "streamableHttp",
"url": "https://cristiandesivo.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"ask-a-human-expert-mcp": {
"type": "http",
"url": "https://cristiandesivo.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http ask-a-human-expert-mcp https://cristiandesivo.com/mcpClaude Desktop
{
"mcpServers": {
"ask-a-human-expert-mcp": {
"url": "https://cristiandesivo.com/mcp"
}
}
}Windsurf
{
"mcpServers": {
"ask-a-human-expert-mcp": {
"serverUrl": "https://cristiandesivo.com/mcp"
}
}
}Let your agent find its tools
Find servers like Ask a human expert 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 Ask a human expert 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.