Social media agent skill builder API
Pick what your agent should do and how much it may do on its own, then copy or download a SKILL.md, AGENTS.md or system prompt. The file uses PostBoost's real MCP tool names and keeps the agent on drafts, approval and a daily cap.
- Endpoint:
POST https://postboost.co/app/api/tools/social-media-agent-skill-builder(operationIdbuildAgentSkill) - Web tool: postboost.co/tools/social-media-agent-skill-builder
- Token: optional (limits)
- MCP: tool
build-agent-skillonhttps://postboost.co/mcp/tools
Request
| Field | Type | Default | Description |
|---|---|---|---|
format | string: skill_md, agents_md, system_prompt | "skill_md" | skill_md (an Agent Skills SKILL.md), agents_md (AGENTS.md) or system_prompt. |
name | string | "postboost-social-media" | The skill name, normalised to lowercase letters, digits and hyphens and cut to 64 characters. |
brand | string | "" | The brand the agent works for; omitted when empty. |
tasks | array of string | ["draft_posts","schedule_posts"] | What the agent does; the output keeps this enum's order. |
networks | array of string | [] | Networks to add character-limit rules for; none leaves the section out. |
autonomy | string: drafts_only, approve_then_schedule, queue_without_asking | "drafts_only" | How much the agent may do without asking. |
daily_cap | integer | 5 | Posts per day the agent may create; 0 adds no cap line. |
brand_voice | boolean | true | Read the workspace brand voice before writing captions. |
connection | string: connector, api_token | "connector" | connector (the OAuth MCP connector) or api_token (the advanced MCP server with an API key). |
rules | array of string | [] | Your own do's and don'ts, one per item. |
Call it
- curl
- Python
- Node.js
- PHP
- Go
- Ruby
- Java
- C#
- Rust
- CLI
curl -X POST https://postboost.co/app/api/tools/social-media-agent-skill-builder \
-H 'Content-Type: application/json' \
-d '{"brand":"Acme Bakery","tasks":["draft_posts"],"networks":["instagram"],"daily_cap":3}'
from postboost import ApiClient, Configuration
from postboost.api.free_tools_api import FreeToolsApi
from postboost.models import FreeToolBuildAgentSkillRequest
with ApiClient(Configuration()) as client:
api = FreeToolsApi(client)
result = api.build_agent_skill(FreeToolBuildAgentSkillRequest.from_dict({"brand": "Acme Bakery", "tasks": ["draft_posts"], "networks": ["instagram"], "daily_cap": 3}))
print(result.to_dict())
import { FreeToolsApi } from 'postboost';
const api = new FreeToolsApi();
const { body } = await api.buildAgentSkill({ brand: "Acme Bakery", tasks: ["draft_posts"], networks: ["instagram"], dailyCap: 3 });
console.log(body);
use PostBoostClient\Api\FreeToolsApi;
use PostBoostClient\Model\FreeToolBuildAgentSkillRequest;
$api = new FreeToolsApi(new GuzzleHttp\Client());
$result = $api->buildAgentSkill(new FreeToolBuildAgentSkillRequest(['brand' => "Acme Bakery", 'tasks' => ["draft_posts"], 'networks' => ["instagram"], 'daily_cap' => 3]));
echo $result;
import (
"context"
"encoding/json"
"fmt"
postboost "github.com/postboost-co/postboost-go"
)
var request postboost.FreeToolBuildAgentSkillRequest
if err := json.Unmarshal([]byte(`{"brand":"Acme Bakery","tasks":["draft_posts"],"networks":["instagram"],"daily_cap":3}`), &request); err != nil {
panic(err)
}
client := postboost.NewAPIClient(postboost.NewConfiguration())
result, _, err := client.FreeToolsAPI.BuildAgentSkill(context.Background()).FreeToolBuildAgentSkillRequest(request).Execute()
fmt.Println(result, err)
require 'postboost'
api = PostBoost::FreeToolsApi.new
result = api.build_agent_skill(PostBoost::FreeToolBuildAgentSkillRequest.new({ brand: "Acme Bakery", tasks: ["draft_posts"], networks: ["instagram"], daily_cap: 3 }))
puts result.to_hash
import com.postboost.ApiClient;
import com.postboost.api.FreeToolsApi;
import com.postboost.model.FreeToolBuildAgentSkillRequest;
import com.postboost.model.FreeToolBuildAgentSkillResponse;
FreeToolsApi api = new FreeToolsApi(new ApiClient());
FreeToolBuildAgentSkillRequest request = FreeToolBuildAgentSkillRequest.fromJson("{\"brand\":\"Acme Bakery\",\"tasks\":[\"draft_posts\"],\"networks\":[\"instagram\"],\"daily_cap\":3}");
FreeToolBuildAgentSkillResponse result = api.buildAgentSkill(request);
System.out.println(result.toJson());
using Newtonsoft.Json;
using PostBoost.Client.Api;
using PostBoost.Client.Client;
using PostBoost.Client.Model;
var api = new FreeToolsApi(new Configuration());
var request = JsonConvert.DeserializeObject<FreeToolBuildAgentSkillRequest>(@"{""brand"":""Acme Bakery"",""tasks"":[""draft_posts""],""networks"":[""instagram""],""daily_cap"":3}");
var result = await api.BuildAgentSkillAsync(request);
Console.WriteLine(result.ToJson());
use postboost::apis::configuration::Configuration;
use postboost::apis::free_tools_api;
use postboost::models::FreeToolBuildAgentSkillRequest;
let config = Configuration::new();
let request: FreeToolBuildAgentSkillRequest = serde_json::from_str(r##"{"brand":"Acme Bakery","tasks":["draft_posts"],"networks":["instagram"],"daily_cap":3}"##)?;
let result = free_tools_api::build_agent_skill(&config, request).await?;
println!("{:?}", result);
echo '{"brand":"Acme Bakery","tasks":["draft_posts"],"networks":["instagram"],"daily_cap":3}' | ./postboost-cli --content-type application/json buildAgentSkill -
With a token, send Authorization: Bearer YOUR_API_TOKEN as a default header (how, per SDK).
Response
{
"format": "skill_md",
"filename": "SKILL.md",
"content": "---\nname: postboost-social-media\ndescription: \"Runs social media for Acme Bakery through PostBoost: Draft posts. Use when the user asks to draft, schedule or report on social posts.\"\ncompatibility: Requires the PostBoost MCP server\n---\n\n# PostBoost social media agent for Acme Bakery\n\nYou run social media for Acme Bakery through PostBoost. Your tasks: Draft posts. Follow the guardrails below on every request.\n\n## Setup\n\n- Connect the PostBoost connector at https://postboost.co/mcp (OAuth). Setup per client: https://postboost.co/tools/mcp-config-generator\n\n## Guardrails\n\n- Save every post as a draft with `create-post` and never pass `schedule`. Never schedule, queue or retry a post. A person schedules in PostBoost.\n- Run `validate-post` before any write.\n- Never call `delete-post` with `permanent: true`.\n- Never pass `allow_duplicate: true` unless the user asks for a repeat post.\n- Pass a fresh UUID as `idempotency_key` to `create-post` and reuse it when you retry, so a retry never creates a second post.\n- If PostBoost refuses a write (a guardrail such as a duplicate or the daily cap), stop and tell the user the refusal code.\n- Create at most 3 posts per day. PostBoost also enforces the workspace's own daily caps.\n- Call `get-brand-voice` before writing any caption.\n\n## Draft posts\n\n1. `list-workspaces`: Get the workspace uuid: every other call needs it.\n2. `list-accounts`: Get the numeric ids of the accounts to write for.\n3. `get-brand-voice`: Read the brand voice before writing any caption.\n4. `count-characters` / `check-post`: Check the length on each network, plus hashtags and media.\n5. `validate-post`: Validate the post with the same arguments you will create it with.\n6. `create-post`: Save it as a draft: do not pass `schedule`.\n7. `get-post`: Read the draft back and show it to the user.\n\n## Network rules\n\n- Instagram caption: 2,200 characters. PostBoost allows up to 5 hashtags per Instagram post.\n\n## Example prompts\n\n- \"Draft 3 LinkedIn posts about our product launch and show them to me before saving.\"\n- \"Write a post for X and Bluesky about our new opening hours and save it as a draft.\"\n",
"install": [
"Save as ~/.claude/skills/postboost-social-media/SKILL.md (the folder name must match name)",
"Or put it in .claude/skills/postboost-social-media/SKILL.md in a project"
],
"tools_used": [
"create-post",
"validate-post",
"delete-post",
"get-brand-voice",
"list-workspaces",
"list-accounts",
"count-characters",
"check-post",
"get-post"
],
"lines": 43,
"warnings": []
}
With MCP
Connect https://postboost.co/mcp/tools (setup) and ask, for example: Build a SKILL.md, AGENTS.md or system prompt for a social media agent with the PostBoost build-agent-skill tool.
Errors
| Status | When |
|---|---|
401 | The Authorization header holds an invalid token. Leave it out to call as a guest. |
413 | The JSON body is larger than 128 KB. |
422 | A field is invalid; the body lists the errors per field. |
429 | A limit is reached; see limits. |