Tools reference
Inputs, permissions, effects, retries, and examples for every Rinhelp tool.
AI apps connected to Rinhelp find these tools at https://mcp.rinhelp.com/mcp. The Rinhelp command-line tool uses the same names and inputs.
Use account.whoami first to check which account and workspace are connected. The list below includes every tool available to AI apps and the command line.
Tool reference
AI apps and the command-line tool use the same 26 tools and inputs.
Retry without repeating work
idempotency_key is a retry key for one request. If a request may have timed out, retry it with the same key and input. Rinhelp will continue the first request instead of repeating the action. Use a new key for a new request.
account.whoami
Confirm which Rinhelp account, workspace, and role the client is using.
- Who can use it:
member - What it does: Shows your account, workspace, and role. It makes no changes.
- If it fails or times out: Call it again if needed. It reads data and makes no changes.
What to provide
No inputs.
Accepted input
{
"type": "object",
"additionalProperties": false,
"properties": {}
}
Example
{}
sources.list
List the websites you have added and their progress preparing pages for answers.
- Who can use it:
member - What it does: Reads the workspace website list.
- If it fails or times out: Call it again if needed. It reads data and makes no changes.
What to provide
Use the cursor from a previous response to see the next results. limit sets how many results to return, from 1 to 100.
Accepted input
{
"type": "object",
"additionalProperties": false,
"properties": {
"cursor": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
}
}
Example
{
"limit": 20
}
sources.start_crawl
Add a public website so Rinhelp can use its pages in answers.
- Who can use it:
member - What it does: Returns a
run_idwhile Rinhelp reads and prepares the pages. Use that value withsources.showuntil the work finishes. - If it fails or times out: If the request may have timed out, retry with the same
urlandidempotency_key. Rinhelp returns the original request instead of adding the website twice.
What to provide
url is the public website URL. idempotency_key is a unique key for this request.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["url", "idempotency_key"],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
}
Example
{
"url": "https://example.com/help",
"idempotency_key": "example-help-2026-09-15"
}
sources.show
Check progress for a website you added and see the pages Rinhelp found.
- Who can use it:
member - What it does: Shows progress and the pages found.
- If it fails or times out: Call it again if needed. It reads data and makes no changes.
What to provide
source_id is the run_id returned by sources.start_crawl.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["source_id"],
"properties": {
"source_id": {
"type": "string",
"minLength": 1
}
}
}
Example
{
"source_id": "run_01JEXAMPLE"
}
sources.show_page
Read the text Rinhelp can use from one page.
- Who can use it:
member - What it does: Shows one page and its saved text.
- If it fails or times out: Call it again if needed. It reads data and makes no changes.
What to provide
page_id identifies the page from sources.show.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["page_id"],
"properties": {
"page_id": {
"type": "string",
"minLength": 1
}
}
}
Example
{
"page_id": "page_01JEXAMPLE"
}
widget.show
Read the current chat widget settings, publishable key, and installation snippet.
- Who can use it:
member - What it does: Reads widget configuration. The publishable key is safe to place in browser code.
- If it fails or times out: Call it again if needed. It reads data and makes no changes.
What to provide
No inputs.
Accepted input
{
"type": "object",
"additionalProperties": false,
"properties": {}
}
Example
{}
widget.update_config
Change one or more chat widget settings.
- Who can use it:
member - What it does: Saves the supplied settings and leaves omitted settings unchanged.
- If it fails or times out: Repeat it with the same input if needed. Rinhelp applies the same result without creating another one.
What to provide
primary_color accepts a color string. position is bottom-right or bottom-left. title and greeting are text your customers see.
Accepted input
{
"type": "object",
"additionalProperties": false,
"minProperties": 1,
"properties": {
"primary_color": {
"type": "string"
},
"position": {
"type": "string",
"enum": ["bottom-right", "bottom-left"]
},
"title": {
"type": "string"
},
"greeting": {
"type": "string"
}
}
}
Example
{
"title": "Need a hand?",
"greeting": "Ask us about setup or shipping.",
"position": "bottom-right"
}
widget.preview
Ask one test question against the help pages currently available to Rinhelp.
- Who can use it:
member - What it does: Returns one completed answer without creating a customer conversation.
- If it fails or times out: Call it again if needed. It reads data and makes no changes.
What to provide
message is 1 to 4,000 characters.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["message"],
"properties": {
"message": {
"type": "string",
"minLength": 1,
"maxLength": 4000
}
}
}
Example
{
"message": "How long does shipping take?"
}
email.show
Read the email address, forwarding address, and setup status.
- Who can use it:
member - What it does: Reads email settings. It does not change domain settings or send email.
- If it fails or times out: Call it again if needed. It reads data and makes no changes.
What to provide
No inputs.
Accepted input
{
"type": "object",
"additionalProperties": false,
"properties": {}
}
Example
{}
email.setup
Set up sending and receiving for your team email address.
- Who can use it:
member - What it does: Creates or reuses the sending setup and forwarding address. It does not change where your domain receives mail.
- If it fails or times out: Repeat it with the same input if needed. Rinhelp applies the same result without creating another one.
What to provide
email is the address your team uses to send and receive customer email.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["email"],
"properties": {
"email": {
"type": "string",
"minLength": 1
}
}
}
Example
{
"email": "hello@example.com"
}
email.verify
Send a test message to verify that forwarded email reaches Rinhelp.
- Who can use it:
member - What it does: Starts a verification test. Check
email.showfor the resulting status. - If it fails or times out: If the request may have timed out, retry with the same
idempotency_key, then callemail.showto check the test status.
What to provide
idempotency_key is a unique key for this test. Reuse it if the same test needs a retry.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["idempotency_key"],
"properties": {
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
}
Example
{
"idempotency_key": "email-verify-example-1"
}
email.sending.show
Read the team sending address, domain records, and verification status.
- Who can use it:
member - What it does: Reads sending settings. It does not change domain settings or send email.
- If it fails or times out: Call it again if needed. It reads data and makes no changes.
What to provide
No inputs.
Accepted input
{
"type": "object",
"additionalProperties": false,
"properties": {}
}
Example
{}
email.sending.setup
Create or reuse the setup for sending from your team address.
- Who can use it:
member - What it does: Returns the two domain records you need to add with your domain provider.
- If it fails or times out: Repeat it with the same input if needed. Rinhelp applies the same result without creating another one.
What to provide
sending_email is the address Rinhelp will use to send email.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["sending_email"],
"properties": {
"sending_email": {
"type": "string",
"minLength": 1
}
}
}
Example
{
"sending_email": "hello@example.com"
}
email.sending.verify
Check whether the sending domain records are verified.
- Who can use it:
member - What it does: Checks both records. Rinhelp cannot send from the team address until both pass.
- If it fails or times out: Repeat it with the same input if needed. Rinhelp applies the same result without creating another one.
What to provide
No inputs.
Accepted input
{
"type": "object",
"additionalProperties": false,
"properties": {}
}
Example
{}
inbox.list
List customer conversations in your team inbox.
- Who can use it:
member - What it does: Shows waiting chats and chats your team has taken over by default.
control=closedreads closed conversations. - If it fails or times out: Call it again if needed. It reads data and makes no changes.
What to provide
Use the cursor from a previous response to see the next results. limit sets how many results to return, from 1 to 100. Set control to closed to see closed conversations.
Accepted input
{
"type": "object",
"additionalProperties": false,
"properties": {
"cursor": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"control": {
"type": "string",
"enum": ["closed"]
}
}
}
Example
{
"limit": 20
}
inbox.list_items
List all open inbox work, including conversations and pending Shopify refund requests.
- Who can use it:
member - What it does: Shows conversations and refund requests from the inbox.
control=closedreads closed work. - If it fails or times out: Call it again if needed. It reads data and makes no changes.
What to provide
Use the cursor from a previous response to see the next results. limit sets how many results to return, from 1 to 100. Set control to closed to see closed work.
Accepted input
{
"type": "object",
"additionalProperties": false,
"properties": {
"cursor": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"control": {
"type": "string",
"enum": ["closed"]
}
}
}
Example
{
"limit": 20
}
inbox.show
Read one conversation and its messages.
- Who can use it:
member - What it does: Shows the saved conversation and messages.
- If it fails or times out: Call it again if needed. It reads data and makes no changes.
What to provide
conversation_id identifies the conversation from an inbox list.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["conversation_id"],
"properties": {
"conversation_id": {
"type": "string",
"minLength": 1
}
}
}
Example
{
"conversation_id": "conversation_01JEXAMPLE"
}
inbox.reply
Send a teammate reply in a customer conversation.
- Who can use it:
member - What it does: Adds a teammate message. The first reply claims a waiting conversation for your team.
- If it fails or times out: If the request may have timed out, retry with the same conversation, message, and
idempotency_key. Rinhelp avoids posting the same reply twice.
What to provide
conversation_id identifies the conversation. message is 1 to 4,000 characters. idempotency_key is a unique key for this reply.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["conversation_id", "message", "idempotency_key"],
"properties": {
"conversation_id": {
"type": "string",
"minLength": 1
},
"message": {
"type": "string",
"minLength": 1,
"maxLength": 4000
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
}
Example
{
"conversation_id": "conversation_01JEXAMPLE",
"message": "I can help with that. Your order ships tomorrow.",
"idempotency_key": "reply-conversation-01"
}
inbox.end_live
Close a live conversation after your team has finished helping the customer.
- Who can use it:
member - What it does: Closes the chat and moves it to the closed inbox list.
- If it fails or times out: Repeat it with the same input if needed. Rinhelp applies the same result without creating another one.
What to provide
conversation_id identifies the live conversation.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["conversation_id"],
"properties": {
"conversation_id": {
"type": "string",
"minLength": 1
}
}
}
Example
{
"conversation_id": "conversation_01JEXAMPLE"
}
team.show
List the people in the workspace and, for owners, pending invitations.
- Who can use it:
member - What it does: Reads workspace access. Everyone can see the team; owners can also see pending invitations.
- If it fails or times out: Call it again if needed. It reads data and makes no changes.
What to provide
No inputs.
Accepted input
{
"type": "object",
"additionalProperties": false,
"properties": {}
}
Example
{}
team.invite
Invite a person to join the workspace as a member.
- Who can use it:
owner - What it does: Sends an email invitation. A pending invitation for the same email is reused.
- If it fails or times out: Repeat it with the same input if needed. Rinhelp applies the same result without creating another one.
What to provide
email is the invitee address. This tool always creates the member role.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["email"],
"properties": {
"email": {
"type": "string",
"minLength": 1
}
}
}
Example
{
"email": "teammate@example.com"
}
team.cancel_invite
Cancel a pending workspace invitation.
- Who can use it:
owner - What it does: Invalidates the pending invitation so it can no longer be accepted.
- If it fails or times out: Repeat it with the same input if needed. Rinhelp applies the same result without creating another one.
What to provide
invitation_id identifies a pending invitation from team.show.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["invitation_id"],
"properties": {
"invitation_id": {
"type": "string",
"minLength": 1
}
}
}
Example
{
"invitation_id": "invitation_01JEXAMPLE"
}
shopify.request_refund
Look up an order and create a refund request for teammate review.
- Who can use it:
member - What it does: Adds a pending refund request. It does not refund the order.
- If it fails or times out: This creates a pending refund request only. If it may have timed out, retry with the same order details and
idempotency_key, then wait for the request to appear before approving it.
What to provide
order_number and email identify the order. amount and reason are optional. idempotency_key identifies this refund request.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["order_number", "email", "idempotency_key"],
"properties": {
"order_number": {
"type": "string",
"minLength": 1
},
"email": {
"type": "string",
"minLength": 1
},
"amount": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
}
Example
{
"order_number": "1001",
"email": "customer@example.com",
"reason": "Wrong size",
"idempotency_key": "refund-order-1001-1"
}
shopify.lookup_order
Look up a Shopify order by its order number and email address.
- Who can use it:
member - What it does: Reads order status and tracking details. It does not change the order.
- If it fails or times out: If the request may have timed out, retry with the same order number, email, and
idempotency_key. This tool only reads Shopify.
What to provide
order_number and email identify the order. idempotency_key identifies this lookup.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["order_number", "email", "idempotency_key"],
"properties": {
"order_number": {
"type": "string",
"minLength": 1
},
"email": {
"type": "string",
"minLength": 1
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
}
Example
{
"order_number": "1001",
"email": "customer@example.com",
"idempotency_key": "lookup-order-1001-1"
}
inbox.approve_action
Approve a pending request and refund the order through Shopify.
- Who can use it:
member - What it does: Sends the refund to Shopify. Approving sends money back to the customer.
- If it fails or times out: If Shopify confirms a failure, retry with the same
action_idandidempotency_key. If the result is unconfirmed, check the refund status before retrying.
What to provide
action_id is the refund.id from inbox.list_items. idempotency_key identifies this approval.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["action_id", "idempotency_key"],
"properties": {
"action_id": {
"type": "string",
"minLength": 1
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
}
Example
{
"action_id": "refund_action_01JEXAMPLE",
"idempotency_key": "approve-refund-01"
}
inbox.reject_action
Reject a pending refund request without refunding the order.
- Who can use it:
member - What it does: Marks the request rejected and does not call Shopify to create a refund.
- If it fails or times out: If the request may have timed out, retry with the same
action_idandidempotency_key. This closes the request without sending a refund to Shopify.
What to provide
action_id is the refund.id from inbox.list_items. idempotency_key identifies this decision.
Accepted input
{
"type": "object",
"additionalProperties": false,
"required": ["action_id", "idempotency_key"],
"properties": {
"action_id": {
"type": "string",
"minLength": 1
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
}
Example
{
"action_id": "refund_action_01JEXAMPLE",
"idempotency_key": "reject-refund-01"
}