Skip to content
Agentmart
Submit a tool

Banjo

Self-hosted AI assistant that places real phone calls for you: bookings, reservations, errands.

Connector by shatch · GitHub account verified by the MCP Registry

IndexedMITRemote (HTTP)★ 2
Write a review

Chalk Labs

Need help deploying Banjo?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Pick your client. Read the repository before you give any tool access to your data.

No install instructions from the source yet. Check the repository for setup steps.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Self-hosted AI assistant that places real phone calls for you: bookings, reservations, errands.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 26, 2026.

Tools
10 read · 16 write · 3 delete · 2 not yet classified
Secrets
None asked for
Install scripts
None found
Runs as
Docker image

Tools by what they do 31

Read from the source code; the running server may list different tools.

Read 10 · Look things up without changing anything.

  • ask_owner
  • check_availability
  • check_my_availability
  • find_contact
  • find_my_booking
  • get_call_transcript
  • get_task_status
  • list_contacts
  • list_recent_tasks
  • suggest_times

Write 16 · Create, change, send or run things.

  • add_contact
  • book_appointment
  • confirm_appointment
  • end_call
  • end_conversation_call
  • escalate_and_end_call
  • flag_for_owner_and_end_call
  • leave_voicemail_and_end_call
  • place_call
  • press_digits
  • record_answer
  • record_task_outcome
Show 4 more tools
  • report_answers_and_end_call
  • reschedule_booking
  • transfer_to_owner
  • undo_confirmed_appointment

Delete 3 · Delete, drop, revoke or wipe things.

  • cancel_task
  • stop_call
  • update_contact

Not yet classified 2 · We could not tell from the name and description.

  • report_negotiation_failed
  • wait_on_hold

Network hosts it talks to 9

  • api.openai.com · found in code
  • api.pushover.net · found in code
  • api.twilio.com · found in code
  • caldav.fastmail.com · found in code
  • carddav.fastmail.com · found in code
  • developers.openai.com · found in code
  • github.com · found in code
  • glama.ai · found in code
  • json.schemastore.org · found in code

Files it touches

  • /dev/null

Tools (31)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • add_contactAdd a contact

    Save a new contact (business or person) for future calls/bookings.

  • ask_owner

    Description is built at runtime.

  • book_appointment

    Lock in a new appointment once a specific time has been agreed with the caller. Fails with "already_has_active_booking" if this caller already has one — offer reschedule_booking instead of retrying. Fails with "outside_business_hours" or "slot_unavailable" if the time does not work; offer a different time rather than retrying the same one. Fails with "in_the_past" or "beyond_lookahead_window" if the requested date is out of the bookable range; offer a different date. Fails with "caller_id_unavailable" if the caller's number is blocked/withheld — this line cannot take a booking without a real c…

  • cancel_taskCancel a scheduled callcan change or delete data

    Call off a phone call that hasn't been placed yet — typically one scheduled for later with place_call's scheduledFor. A call already in progress or finished is not affected; the result says whether it was cancelled. An agent's key can cancel only calls it asked for.

  • check_availability

    Check whether a specific date and time the caller is proposing is free on the calendar and within business hours. Use this before agreeing to any specific time.

  • check_my_availability

    Description is built at runtime.

  • confirm_appointment

    Description is built at runtime.

  • end_call

    Call this once you have said everything you need to say and are ready to end the call normally — e.g. right after book_appointment or reschedule_booking has succeeded and you have told the caller the confirmed details.

  • end_conversation_call

    Use this once this open-ended conversation has reached a natural close — you've said what you called to say, and/or the other person has too, and there's nothing more to discuss right now. This is a normal, successful way to end a conversational call — it is not an escalation or a failure. Only available on calls with no booking/negotiation goal. Before calling this, in the same turn: answer any question the other party just asked, then say an actual goodbye to them (e.g. "Thanks so much — have a great day!"). Your goodbye is the last thing you say. Never call this in the same turn as a questi…

  • escalate_and_end_call

    Description is built at runtime.

  • find_contactFind a contactread-only

    Fuzzy-search saved contacts by name or notes text. Call this before place_call to resolve a contactId, or to check whether a contact already exists before add_contact.

  • find_my_booking

    Look up the current caller's own active booking, if any. Takes no arguments — it always looks up whoever is calling right now. The result includes callerName, the name already on file from when the booking was made — read it back to the caller to confirm identity rather than asking them to restate their name.

  • flag_for_owner_and_end_call

    Use this when you are genuinely stuck and cannot proceed — a request outside what your tools support, a hostile or nonsensical caller, or anything you cannot resolve on your own. Texts the assistant's owner and ends the call.

  • get_call_transcriptGet call transcriptread-only

    Read what was said on a task's phone calls, line by line, when the owner wants to know what the other party actually said. Only available if this install saves transcripts (PERSIST_TRANSCRIPTS); the result says so if not. Lines marked suspect may not be what was said.

  • get_task_statusGet task statusread-only

    Check the current status and (if finished) outcome of a previously started task, whether it was a phone call or a recorded online booking. For an 'ask' call, collectedAnswers holds the answers saved during the call, even when it ended as something other than answered (a transfer, an escalation).

Show 16 more tools
  • leave_voicemail_and_end_call

    Leave a voicemail message and end the call. Use this when you have reached an answering machine or voicemail system instead of a human. Call it without saying anything first: the voicemail records everything, and it must open with the AI disclosure, which the system says for you. Provide the message as the `message` argument — the system says the disclosure, then your message, verbatim, then hangs up. Leave the disclosure out of the message, and do NOT say the message yourself: the callee would hear it twice. Never tell the callee how the message is delivered or that the call is ending.

  • list_contactsList contactsread-only

    List saved contacts, optionally filtered by category.

  • list_recent_tasksList recent tasksread-only

    List the most recently updated tasks (phone calls and online bookings), most recent first. An ask call's answers saved before it ended some other way aren't included: get_task_status has them (collectedAnswers).

  • place_callPlace a phone call

    Place an outbound phone call to a contact to accomplish a task (e.g. book an appointment, or ask a business a question with mode 'ask'). Returns immediately with a taskId — the call itself runs asynchronously over the following minutes (or at scheduledFor, if given, to call later instead of now). Poll get_task_status with the returned taskId to learn the outcome. If this server asks the owner to approve calls first, the result says so: get_task_status then shows approval: 'waiting' until they approve (the call goes ahead) or 30 minutes pass (it's cancelled, approval: 'not_approved'). Tell the …

  • press_digits

    Send DTMF tones on the phone line, e.g. to navigate an IVR menu.

  • record_answer

    Save one answer as soon as it is settled: call this right after the other party confirms your read-back of an answer, without saying anything about it, then carry on with the call. Use the question's number in your list. If they can't or won't answer one, save it with answered: false. Saving the same number again replaces what you saved before. This does not end the call; report_answers_and_end_call still does, at the end.

  • record_task_outcomeRecord an online booking

    Log the outcome of a task that was completed OUTSIDE the phone-call path (typically an online booking the skill completed itself via browser automation), so it appears in the same task history as phone-call tasks.

  • report_answers_and_end_call

    Use this to end the call once you have asked every question on your list and they have answered what they can. Record one entry per question, by its number: what they said, in a short plain sentence, or answered: false if they didn't know, wouldn't say, or you never got to it. Record only what they actually told you on this call. Never fill a gap with a guess. Answers you saved with record_answer are kept: an answer here for the same question replaces it, and answered: false here never erases one. This is the normal, successful end of this call, even if some questions went unanswered. Before c…

  • report_negotiation_failed

    Use this when you reached and properly engaged with a human, but none of the times offered by either side fit the constraints of the task, and no further negotiation is possible. This is distinct from escalate_and_end_call — use this only when the call went smoothly but simply failed to reach an agreement.

  • reschedule_booking

    Move the current caller's own active booking to a new date/time. The name on the booking carries over automatically — do not ask the caller for their name again. Fails with "no_active_booking" if they don't have one — direct them to book_appointment instead. Fails with "outside_business_hours" or "slot_unavailable" if the new time does not work; their original booking is left untouched in that case. Fails with "in_the_past" or "beyond_lookahead_window" if the requested date is out of the bookable range; their original booking is left untouched in that case too. Fails with "caller_id_unavailabl…

  • stop_callHang up a call in progresscan change or delete data

    Hang up a call that is already in progress — the one thing cancel_task cannot do. Use this to stop a call that is going wrong or was placed in error. The task is recorded as failed with the reason given, and the usual outcome notification is sent. An agent's key can stop only calls it asked for.

  • suggest_times

    Suggest a few open times on a specific day, within business hours, when the caller does not have a specific time in mind yet.

  • transfer_to_owner

    Description is built at runtime.

  • undo_confirmed_appointment

    Description is built at runtime.

  • update_contactUpdate a contactcan change or delete data

    Update an existing contact — e.g. record the assistant's owner's stated preferred booking channel so future tasks for this contact skip asking again, or update notes/booking URL. Notes go into every call to the contact, and the booking URL is the page opened to book online, so only the owner's key can change either.

  • wait_on_hold

    Use this, without saying anything first, as soon as you are in a hold queue: hold music, "please hold", "your call will be answered by the next available…", or an estimated wait time. Also use it when a phone menu says you can remain on the line and you have nothing to enter. Not after each key press, though: a menu goes on to its next prompt by itself, and you answer it faster off hold. You stay on the line silently, and you are told the moment a live person picks up, or handed back as soon as a menu asks you for something. Never use it with a person on the line.

Signals

Stars
2
Forks
1
Open issues
13
Last commit
Oct 24, 2026 (14 days ago)
Last release
Oct 22, 2026 (15 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
io.github.shatch/banjo
Version
0.1.14
Auth
API key
Packages
oci ghcr.io/shatch/banjo:0.1.14
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get Banjo running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying Banjo?

CallGet help
Cite this page

Banjo MCP server. Agent Mart. https://agentmart.dev/connectors/shatch-banjo (last updated 2026-10-24)