curl --request POST \
--url https://app.stockshift.io/mcp \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "<string>"
}
'import requests
url = "https://app.stockshift.io/mcp"
payload = {
"jsonrpc": "2.0",
"method": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.stockshift.io/mcp",
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([
'jsonrpc' => '2.0',
'method' => '<string>'
]),
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.stockshift.io/mcp"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"<string>\"\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))
}{
"jsonrpc": "2.0",
"method": "<string>",
"id": "<unknown>",
"params": {}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"detail": "<string>",
"errors": {},
"feature": "<string>",
"reason": "<string>",
"attempts_left": 123,
"rule_ids": [
"<string>"
],
"witness": "<string>",
"blind_recount": true,
"flags": [
{
"flag": "<string>",
"facts": {},
"choices": [
"<string>"
]
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"detail": "<string>",
"errors": {},
"feature": "<string>",
"reason": "<string>",
"attempts_left": 123,
"rule_ids": [
"<string>"
],
"witness": "<string>",
"blind_recount": true,
"flags": [
{
"flag": "<string>",
"facts": {},
"choices": [
"<string>"
]
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"detail": "<string>",
"errors": {},
"feature": "<string>",
"reason": "<string>",
"attempts_left": 123,
"rule_ids": [
"<string>"
],
"witness": "<string>",
"blind_recount": true,
"flags": [
{
"flag": "<string>",
"facts": {},
"choices": [
"<string>"
]
}
]
}Llama al servidor MCP
Apunta un cliente MCP, como un asistente de IA, a esta dirección y podrá trabajar en StockShift mediante Streamable HTTP. El cliente inicia sesión con OAuth (el esquema oauth2) y cada herramienta se ejecuta como el miembro que la conectó, solo con los alcances que aprobó. Una herramienta hace exactamente lo que hace el mismo botón en la app, así que los permisos, los límites del plan y el rastro de auditoría aplican como lo harían al miembro. Una falla vuelve como un error de herramienta con los mismos detalles del problema que envía esta API. El plan de la organización debe incluir la función developer.mcp. Llama a tools/list para ver lo que el miembro puede usar; estas son todas las herramientas que tiene el servidor.
| Herramienta | Qué hace |
|---|---|
catalog_show_item | Consulta un artículo |
insights_run_saved_report | Ejecuta un reporte |
inventory_change_stock_status | Cambia el estado de las existencias |
inventory_create_stock_transfer | Crea una transferencia de existencias |
inventory_show_stock | Consulta los niveles de existencias |
manufacturing_release_build | Libera una orden de fabricación |
manufacturing_show_build | Consulta una orden de fabricación |
purchasing_create_purchase_order | Crea una orden de compra |
purchasing_send_purchase_order | Envía una orden de compra al proveedor |
purchasing_show_purchase_order | Consulta una orden de compra |
sales_confirm_sales_order | Confirma un pedido de venta |
sales_reserve_sales_order | Reserva existencias para un pedido de venta |
sales_send_invoice | Envía una factura por correo electrónico al cliente |
sales_show_sales_order | Consulta un pedido de venta |
curl --request POST \
--url https://app.stockshift.io/mcp \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"method": "<string>"
}
'import requests
url = "https://app.stockshift.io/mcp"
payload = {
"jsonrpc": "2.0",
"method": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.stockshift.io/mcp",
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([
'jsonrpc' => '2.0',
'method' => '<string>'
]),
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.stockshift.io/mcp"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"method\": \"<string>\"\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))
}{
"jsonrpc": "2.0",
"method": "<string>",
"id": "<unknown>",
"params": {}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"detail": "<string>",
"errors": {},
"feature": "<string>",
"reason": "<string>",
"attempts_left": 123,
"rule_ids": [
"<string>"
],
"witness": "<string>",
"blind_recount": true,
"flags": [
{
"flag": "<string>",
"facts": {},
"choices": [
"<string>"
]
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"detail": "<string>",
"errors": {},
"feature": "<string>",
"reason": "<string>",
"attempts_left": 123,
"rule_ids": [
"<string>"
],
"witness": "<string>",
"blind_recount": true,
"flags": [
{
"flag": "<string>",
"facts": {},
"choices": [
"<string>"
]
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "<string>",
"detail": "<string>",
"errors": {},
"feature": "<string>",
"reason": "<string>",
"attempts_left": 123,
"rule_ids": [
"<string>"
],
"witness": "<string>",
"blind_recount": true,
"flags": [
{
"flag": "<string>",
"facts": {},
"choices": [
"<string>"
]
}
]
}Autorizaciones
Para apps que otras personas conectan a su cuenta de StockShift. Usa el flujo de código de autorización OAuth 2.1 con PKCE (S256); no hay secreto de cliente. Descubre los endpoints en /.well-known/oauth-authorization-server (RFC 8414) y registra tu app en POST /oauth/register (RFC 7591). El miembro elige la organización y aprueba los alcances en la página de consentimiento, y el token nunca puede hacer más de lo que podría hacer el miembro. Envíalo como Authorization: Bearer <token>, igual que una clave de API. Los tokens de acceso duran una hora; cada actualización devuelve un token de actualización nuevo, así que guárdalo.
Cuerpo
Un mensaje JSON-RPC 2.0 del Model Context Protocol: una solicitud, una notificación o una respuesta.
La versión de JSON-RPC. Siempre es 2.0.
2.0 El método MCP que se llama, como initialize, tools/list o tools/call.
El id de la solicitud, un número o una cadena, que la respuesta repite. Falta en una notificación.
Los parámetros del método. Una llamada a una herramienta nombra la herramienta y sus argumentos.
Respuesta
La respuesta JSON-RPC, como JSON o como un flujo de eventos enviados por el servidor.
Un mensaje JSON-RPC 2.0 del Model Context Protocol: una solicitud, una notificación o una respuesta.
La versión de JSON-RPC. Siempre es 2.0.
2.0 El método MCP que se llama, como initialize, tools/list o tools/call.
El id de la solicitud, un número o una cadena, que la respuesta repite. Falta en una notificación.
Los parámetros del método. Una llamada a una herramienta nombra la herramienta y sus argumentos.
¿Esta página le ayudó?