ToolYourToolYourAPI Docs

SDK vs MCP Workflows

When to use @toolyour/sdk single-tool calls vs MCP skills and run_workflow jobs. Same API key and quota.

ToolYour exposes one catalog with three surfaces: browser, REST, and MCP. The @toolyour/sdk package wraps every API-backed tool as typed TypeScript. MCP adds agent-oriented layers on top: curated skills (playbooks) and workflows (multi-step jobs with merged jobReport).

SurfaceWhat you getBest for
SDKty.seo.metaTagsAnalyzer({ url }) — one tool, one responseNode/TS apps, CI scripts, explicit control
RESTSame routes as SDK — any HTTP clientNon-Node stacks, curl, OpenAPI playground
MCP skillsload_skill("seo-site-audit") → markdown playbookCursor, Claude Desktop, agents that need guidance
MCP workflowsrun_workflow("full-seo-audit", { url }) → merged jobReportMulti-tool audits without orchestrating each call

Browser-only tools (no API) are not in the SDK or MCP tool list — use toolyour.com in the browser.

Decision guide

Need exactly one known tool with typed input/output?
  → SDK (or REST). See SDK Tool Map for purpose + example call.

Building an agent in Cursor / Claude with playbooks?
  → MCP: plan_task → solve_task(compact) or run_playbook(skillId).

Want a pre-built multi-step audit with one merged report?
  → MCP: run_playbook / run_workflow. Replicate manually in SDK by calling each step yourself.

Quota: Every underlying tool call counts once — whether you use SDK, REST, MCP invoke_tool, or workflow steps. plan_task and catalog browse are free.

MCP skills (playbooks)

Skills are markdown resources plus an optional mapped workflow. Prefer run_playbook(skillId) to execute in one step. Use load_skill only when you need the markdown guidance.

plan_task(goal) → run_playbook("ship-gate", { url }) → verify_task(...)
# or
list_skills() → load_skill("seo-site-audit") → invoke_tool("seoAnalyze", { url })
Skill IDPurposeTypical SDK alternative
seo-site-auditOn-page SEO audit for a URLty.seo.seoAnalyze, ty.seo.pageSpeedAnalyzer
page-performanceCore Web Vitals proxy + fixesty.seo.pageSpeedAnalyzer (+ workflow below)
content-refreshRefresh outdated page copyty.ai.aiTextAi, ty.seo.contentOptimization
content-qualityContent depth / readabilityty.seo.contentOptimization, ty.seo.rankCheckerKeywords
document-pipelineDOCX → PDF with download URLty.documents.docxToPdf({ file })
social-previewOpen Graph / Twitter Card auditty.seo.socialMediaIntegration({ url })
crawl-analysisLink graph / internal linkingty.seo.internalLinking, ty.seo.linkExtractor
seo-deploy-regressionPost-deploy bulk URL scorecardty.seo.bulkUrlSeoAuditor, ty.seo.seoChangeDiff
web-security-auditHeaders, TLS, cookies, email authty.security.* analyzers per URL
secrets-and-auth-hygieneLeaked secrets, JWT, passwords, HMACty.security.secretLeakScanner, ty.security.jwtDecoder, …
developer-ship-checklistPre-deploy security + speed gateMultiple ty.security.* + ty.seo.pageSpeedAnalyzer
dns-email-securitySPF/DKIM/DMARC, DNS, security.txtty.security.spfDkimDmarcChecker, ty.security.dnsLookup

Full skill reference: MCP Skills & Workflows.

SDK metadata for skills

The SDK exports read-only skill metadata (for docs generators and agent bootstrapping):

import { MCP_SKILLS } from "@toolyour/sdk/mcp";

console.log(MCP_SKILLS.find((s) => s.id === "seo-site-audit")?.description);
// → related operationIds for manual SDK orchestration

Skills are not callable SDK methods — use MCP load_skill or implement the playbook with SDK tool calls.

MCP workflows (multi-step jobs)

run_workflow(workflowId, input) runs several API tools server-side and returns a merged jobReport when a synthesizer is configured. Steps bill one request each, same as calling the SDK for each tool separately.

run_workflow("full-seo-audit", { url: "https://example.com" })
Workflow IDPurposeUnderlying tools (SDK equivalents)
full-seo-auditSEO + page speed merged reportseoAnalyze, pageSpeedAnalyzer
core-web-vitals-jobCWV diagnosis + prioritized fixespageSpeedAnalyzer, seoAnalyze, socialMediaIntegration
full-seo-optimization-jobFull SEO optimization (6 tools)SEO, content, speed, links, extract, social
internal-link-architecture-jobInternal link graph + hub SEOinternalLinking, linkExtractor, seoAnalyze
technical-seo-audit-jobTechnical SEO liteseoAnalyze, linkExtractor, pageSpeedAnalyzer
social-preview-audit-jobOG / Twitter Card auditsocialMediaIntegration
content-quality-audit-jobContent + keyword signalscontentOptimization, rankCheckerKeywords
keyword-opportunity-review-jobKeyword gaps + contentrankCheckerKeywords, contentOptimization
seo-deploy-regression-jobPost-deploy bulk URL scorecardbulkUrlSeoAuditor
seo-deploy-regression-diff-jobBulk scorecard + staging/prod diffbulkUrlSeoAuditor, seoChangeDiff
full-security-auditHeaders + TLS + cookiessecurityHeadersAnalyzer, sslTlsCertificateChecker, cookieSecurityAnalyzer
security-headers-jobSecurity headers onlysecurityHeadersAnalyzer
developer-ship-checklist-jobPre-deploy ship gateheaders, TLS, mixed content, status, speed
ship-gate-jobPass/fail deploy gate (alias)same steps as developer ship checklist
secrets-hygiene-jobScan pasted text for secretssecretLeakScanner
email-auth-security-jobSPF/DKIM/DMARC + DNS + security.txtspfDkimDmarcChecker, dnsLookup, securityTxtChecker
content-optimizationSingle content optimization passcontentOptimization
document-convert-pipelineDOCX → PDF pipelinedocxToPdf

Workflows with a synthesizer return jobReport (toolyour.jobReport@1) — scores, findings, and prioritized actions. Partial failures may return status: "partial" with failedStep.

Replicating a workflow in the SDK

There is no ty.workflows.run() in the SDK today. To match a workflow in TypeScript:

import { ToolYour } from "@toolyour/sdk";

const ty = ToolYour({ apiKey: process.env.TOOLYOUR_API_KEY! });

const url = "https://example.com";
const [seo, speed] = await Promise.all([
  ty.seo.seoAnalyze({ url }),
  ty.seo.pageSpeedAnalyzer({ url }),
]);
// Merge seo.result + speed.result in your app (workflow synthesizer logic is MCP-only)

For production agents, prefer MCP run_workflow when you want the platform merge logic. Prefer the SDK when you need custom orchestration, caching, or non-MCP runtimes.

SDK metadata for workflows

import { MCP_WORKFLOWS } from "@toolyour/sdk/mcp";

const wf = MCP_WORKFLOWS.find((w) => w.id === "full-seo-audit");
console.log(wf?.steps.map((s) => s.operationId));
// → ["seoAnalyze", "pageSpeedAnalyzer"]

MCP helpers in the SDK

Generate Cursor/Claude MCP config and call tools by MCP name via the REST shim (same quota):

import {
  toolYourMcpServerConfigJson,
  invokeMcpTool,
  MCP_WORKFLOWS,
} from "@toolyour/sdk/mcp";

console.log(toolYourMcpServerConfigJson({ apiKey: process.env.TOOLYOUR_API_KEY! }));

await invokeMcpTool("metaTagsAnalyzer", { url: "https://example.com" }, {
  apiKey: process.env.TOOLYOUR_API_KEY!,
});

invokeMcpTool maps to the same REST routes as ty.seo.metaTagsAnalyzer. It does not expose load_skill or run_workflow — connect an MCP client for those.

Example agent prompt

Plan then run a ship gate for https://example.com and list the top blockers.

Expected MCP sequence: plan_taskrun_playbook("ship-gate", { url }) or solve_task → optional verify_task after fixes.

Equivalent SDK script: call the underlying security + speed tools yourself — see SDK Tool Map. Starter kits: toolyour-sdk/examples/agent-starter/.

Next steps

On this page