curl --request POST \
--url https://app.apigene.ai/api/mcp/create_skill \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"content": "<string>",
"license": "",
"compatibility": "",
"metadata": {},
"allowed_tools": "",
"status": "active",
"scripts": {},
"references": {},
"assets": {}
}
'import requests
url = "https://app.apigene.ai/api/mcp/create_skill"
payload = {
"name": "<string>",
"description": "<string>",
"content": "<string>",
"license": "",
"compatibility": "",
"metadata": {},
"allowed_tools": "",
"status": "active",
"scripts": {},
"references": {},
"assets": {}
}
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({
name: '<string>',
description: '<string>',
content: '<string>',
license: '',
compatibility: '',
metadata: {},
allowed_tools: '',
status: 'active',
scripts: {},
references: {},
assets: {}
})
};
fetch('https://app.apigene.ai/api/mcp/create_skill', 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.apigene.ai/api/mcp/create_skill",
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([
'name' => '<string>',
'description' => '<string>',
'content' => '<string>',
'license' => '',
'compatibility' => '',
'metadata' => [
],
'allowed_tools' => '',
'status' => 'active',
'scripts' => [
],
'references' => [
],
'assets' => [
]
]),
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.apigene.ai/api/mcp/create_skill"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"content\": \"<string>\",\n \"license\": \"\",\n \"compatibility\": \"\",\n \"metadata\": {},\n \"allowed_tools\": \"\",\n \"status\": \"active\",\n \"scripts\": {},\n \"references\": {},\n \"assets\": {}\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.apigene.ai/api/mcp/create_skill")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"content\": \"<string>\",\n \"license\": \"\",\n \"compatibility\": \"\",\n \"metadata\": {},\n \"allowed_tools\": \"\",\n \"status\": \"active\",\n \"scripts\": {},\n \"references\": {},\n \"assets\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.apigene.ai/api/mcp/create_skill")
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 \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"content\": \"<string>\",\n \"license\": \"\",\n \"compatibility\": \"\",\n \"metadata\": {},\n \"allowed_tools\": \"\",\n \"status\": \"active\",\n \"scripts\": {},\n \"references\": {},\n \"assets\": {}\n}"
response = http.request(request)
puts response.read_body{
"skill": {
"id": "<string>",
"name": "<string>",
"description": "<string>",
"content": "<string>",
"created_by": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"license": "",
"compatibility": "",
"metadata": {},
"allowed_tools": "",
"status": "active",
"scripts": {},
"references": {},
"assets": {}
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Create Skill
Create a new skill and optionally add it to the specified agent. Only agents can create skills via MCP; the new skill is created in the tenant and automatically added to the agent’s skills list so the agent can use it.
curl --request POST \
--url https://app.apigene.ai/api/mcp/create_skill \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"content": "<string>",
"license": "",
"compatibility": "",
"metadata": {},
"allowed_tools": "",
"status": "active",
"scripts": {},
"references": {},
"assets": {}
}
'import requests
url = "https://app.apigene.ai/api/mcp/create_skill"
payload = {
"name": "<string>",
"description": "<string>",
"content": "<string>",
"license": "",
"compatibility": "",
"metadata": {},
"allowed_tools": "",
"status": "active",
"scripts": {},
"references": {},
"assets": {}
}
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({
name: '<string>',
description: '<string>',
content: '<string>',
license: '',
compatibility: '',
metadata: {},
allowed_tools: '',
status: 'active',
scripts: {},
references: {},
assets: {}
})
};
fetch('https://app.apigene.ai/api/mcp/create_skill', 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.apigene.ai/api/mcp/create_skill",
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([
'name' => '<string>',
'description' => '<string>',
'content' => '<string>',
'license' => '',
'compatibility' => '',
'metadata' => [
],
'allowed_tools' => '',
'status' => 'active',
'scripts' => [
],
'references' => [
],
'assets' => [
]
]),
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.apigene.ai/api/mcp/create_skill"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"content\": \"<string>\",\n \"license\": \"\",\n \"compatibility\": \"\",\n \"metadata\": {},\n \"allowed_tools\": \"\",\n \"status\": \"active\",\n \"scripts\": {},\n \"references\": {},\n \"assets\": {}\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.apigene.ai/api/mcp/create_skill")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"content\": \"<string>\",\n \"license\": \"\",\n \"compatibility\": \"\",\n \"metadata\": {},\n \"allowed_tools\": \"\",\n \"status\": \"active\",\n \"scripts\": {},\n \"references\": {},\n \"assets\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.apigene.ai/api/mcp/create_skill")
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 \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"content\": \"<string>\",\n \"license\": \"\",\n \"compatibility\": \"\",\n \"metadata\": {},\n \"allowed_tools\": \"\",\n \"status\": \"active\",\n \"scripts\": {},\n \"references\": {},\n \"assets\": {}\n}"
response = http.request(request)
puts response.read_body{
"skill": {
"id": "<string>",
"name": "<string>",
"description": "<string>",
"content": "<string>",
"created_by": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"license": "",
"compatibility": "",
"metadata": {},
"allowed_tools": "",
"status": "active",
"scripts": {},
"references": {},
"assets": {}
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
JWT Authorization header using the Bearer scheme. Example: 'Authorization: Bearer {token}'
Query Parameters
The name of the GenAI app (agent).
The type of the app; must be 'agent'.
Body
Skill definition (name, description, content, etc.).
Name of the skill
Description of the skill
Full SKILL.md content
Optional license field
Optional compatibility field
Optional metadata dict
Optional allowed-tools field
Status of the skill: active or disabled
Optional scripts/ files: path -> content (per Agent Skills spec)
Show child attributes
Show child attributes
Optional references/ files: path -> content (per Agent Skills spec)
Show child attributes
Show child attributes
Optional assets/ files: path -> content (per Agent Skills spec)
Show child attributes
Show child attributes
Response
Successful Response
Response model for a single skill
The skill data
Show child attributes
Show child attributes
