Skip to main content
POST
/
projects
/
{projectId}
/
servers
/
{serverId}
/
tools
/
call
Call a tool
curl --request POST \
  --url https://app.mcpjam.com/api/v1/projects/{projectId}/servers/{serverId}/tools/call \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "toolName": "create_issue",
  "parameters": {
    "title": "Bug: login fails"
  }
}
'
import requests

url = "https://app.mcpjam.com/api/v1/projects/{projectId}/servers/{serverId}/tools/call"

payload = {
    "toolName": "create_issue",
    "parameters": { "title": "Bug: login fails" }
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: JSON.stringify({toolName: 'create_issue', parameters: {title: 'Bug: login fails'}})
};

fetch('https://app.mcpjam.com/api/v1/projects/{projectId}/servers/{serverId}/tools/call', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://app.mcpjam.com/api/v1/projects/{projectId}/servers/{serverId}/tools/call",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode([
    'toolName' => 'create_issue',
    'parameters' => [
        'title' => 'Bug: login fails'
    ]
  ]),
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer <token>",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://app.mcpjam.com/api/v1/projects/{projectId}/servers/{serverId}/tools/call"

	payload := strings.NewReader("{\n  \"toolName\": \"create_issue\",\n  \"parameters\": {\n    \"title\": \"Bug: login fails\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://app.mcpjam.com/api/v1/projects/{projectId}/servers/{serverId}/tools/call")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"toolName\": \"create_issue\",\n  \"parameters\": {\n    \"title\": \"Bug: login fails\"\n  }\n}")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://app.mcpjam.com/api/v1/projects/{projectId}/servers/{serverId}/tools/call")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"toolName\": \"create_issue\",\n  \"parameters\": {\n    \"title\": \"Bug: login fails\"\n  }\n}"

response = http.request(request)
puts response.read_body
{ "content": [ { "type": "text", "text": "Issue created: #42" } ] }

Authorizations

Authorization
string
header
required

MCPJam API key (sk_…). Create one at Settings → API keys. Guest sessions cannot use the API, and API keys cannot manage other API keys.

Path Parameters

projectId
string
required

ID of the hosted project that contains the server.

serverId
string
required

ID of the server inside the project.

Body

application/json
toolName
string
required

Tool name, exactly as returned by the tools list.

parameters
object

Tool arguments matching the tool's inputSchema. Defaults to {}.

Response

The MCP CallToolResult. Check isError for tool-level failures.

MCP tool execution result, returned verbatim from the server.

content
object[]
required

Content blocks (text, image, resource, ...).

structuredContent
object

Structured output matching the tool's outputSchema, when declared.

isError
boolean

true when the tool reported a failure. The HTTP call still succeeds — the server answered.