@motiblog/mcp 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -10
- package/dist/http.js +65 -17
- package/dist/http.js.map +1 -1
- package/dist/index.js +65 -17
- package/dist/index.js.map +1 -1
- package/dist/lib.d.ts +18 -4
- package/dist/lib.js +65 -17
- package/dist/lib.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -483,7 +483,7 @@ var toolDefinitions = [
|
|
|
483
483
|
name: "get_digest",
|
|
484
484
|
description: "One-call morning check-in for a project: article counts by lifecycle status, the REVIEW queue (what is waiting to be published, with word counts), posts published in the last 7 days, content plans due in the next 7 days, the latest published post, quota usage, and the project's current autonomy level (L1 = nothing ships without agent review; L2 = clean articles auto-publish). Start every check-in here.",
|
|
485
485
|
inputSchema: { ...projectIdArg },
|
|
486
|
-
annotations: { readOnlyHint: true },
|
|
486
|
+
annotations: { title: "Morning Digest", readOnlyHint: true, destructiveHint: false },
|
|
487
487
|
async handler(args, ctx) {
|
|
488
488
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
489
489
|
const [project, articles, plans] = await Promise.all([
|
|
@@ -500,7 +500,7 @@ var toolDefinitions = [
|
|
|
500
500
|
name: "list_projects",
|
|
501
501
|
description: "List every MotiBlog project the API key can access, with settings that matter to agents: requireApproval (REVIEW vs APPROVED after generation), autoPublish, factCheckStrict, selfHostedBlog, and article quota usage.",
|
|
502
502
|
inputSchema: {},
|
|
503
|
-
annotations: { readOnlyHint: true },
|
|
503
|
+
annotations: { title: "List Projects", readOnlyHint: true, destructiveHint: false },
|
|
504
504
|
async handler(_args, ctx) {
|
|
505
505
|
return json(await ctx.client.listProjects());
|
|
506
506
|
}
|
|
@@ -509,7 +509,7 @@ var toolDefinitions = [
|
|
|
509
509
|
name: "get_project",
|
|
510
510
|
description: "Get one MotiBlog project in detail: pipeline settings (aiModel, language, internalLinks, banner), positioning inputs (businessProfile, productTruth, manualPositioning) and quota state.",
|
|
511
511
|
inputSchema: { ...projectIdArg },
|
|
512
|
-
annotations: { readOnlyHint: true },
|
|
512
|
+
annotations: { title: "Project Details", readOnlyHint: true, destructiveHint: false },
|
|
513
513
|
async handler(args, ctx) {
|
|
514
514
|
return json(await ctx.client.getProject(resolveProjectId(ctx, args.project_id)));
|
|
515
515
|
}
|
|
@@ -519,6 +519,7 @@ var toolDefinitions = [
|
|
|
519
519
|
name: "start_pipeline",
|
|
520
520
|
description: "Start the autonomous pipeline for a project: site crawl/analysis \u2192 topic selection \u2192 article generation for scheduled plans. Returns immediately; poll get_pipeline_status or list_articles(status=GENERATING) to follow progress.",
|
|
521
521
|
inputSchema: { ...projectIdArg },
|
|
522
|
+
annotations: { title: "Start Content Pipeline", readOnlyHint: false, destructiveHint: false },
|
|
522
523
|
async handler(args, ctx) {
|
|
523
524
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
524
525
|
return json(await ctx.client.pipelineStart(projectId));
|
|
@@ -528,7 +529,7 @@ var toolDefinitions = [
|
|
|
528
529
|
name: "get_pipeline_status",
|
|
529
530
|
description: "Get current pipeline run state for a project: whether a run is active, its steps, and recent run history. Use after start_pipeline or generate_article.",
|
|
530
531
|
inputSchema: { ...projectIdArg },
|
|
531
|
-
annotations: { readOnlyHint: true },
|
|
532
|
+
annotations: { title: "Pipeline Status", readOnlyHint: true, destructiveHint: false },
|
|
532
533
|
async handler(args, ctx) {
|
|
533
534
|
return json(
|
|
534
535
|
await ctx.client.pipelineStatus(resolveProjectId(ctx, args.project_id))
|
|
@@ -543,6 +544,7 @@ var toolDefinitions = [
|
|
|
543
544
|
topic: import_zod.z.string().min(1).describe('The proposed topic/title, e.g. "How headless CMSs serve AI agents"'),
|
|
544
545
|
...projectIdArg
|
|
545
546
|
},
|
|
547
|
+
annotations: { title: "Suggest Topics", readOnlyHint: false, destructiveHint: false },
|
|
546
548
|
async handler(args, ctx) {
|
|
547
549
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
548
550
|
return json(await ctx.client.createContentPlanFromGap(projectId, String(args.topic)));
|
|
@@ -552,7 +554,7 @@ var toolDefinitions = [
|
|
|
552
554
|
name: "list_content_plans",
|
|
553
555
|
description: "List the content plan queue for a project with each entry status: DRAFT (proposed), APPROVED (cleared for generation), IN_PROGRESS, COMPLETED.",
|
|
554
556
|
inputSchema: { ...projectIdArg },
|
|
555
|
-
annotations: { readOnlyHint: true },
|
|
557
|
+
annotations: { title: "List Content Plans", readOnlyHint: true, destructiveHint: false },
|
|
556
558
|
async handler(args, ctx) {
|
|
557
559
|
return json(await ctx.client.listContentPlans(resolveProjectId(ctx, args.project_id)));
|
|
558
560
|
}
|
|
@@ -564,6 +566,7 @@ var toolDefinitions = [
|
|
|
564
566
|
plan_id: import_zod.z.string().describe("Content plan entry id (from list_content_plans)"),
|
|
565
567
|
...projectIdArg
|
|
566
568
|
},
|
|
569
|
+
annotations: { title: "Approve Content Plan", readOnlyHint: false, destructiveHint: false },
|
|
567
570
|
async handler(args, ctx) {
|
|
568
571
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
569
572
|
return json(await ctx.client.approveContentPlan(projectId, String(args.plan_id)));
|
|
@@ -576,6 +579,7 @@ var toolDefinitions = [
|
|
|
576
579
|
plan_id: import_zod.z.string().describe("Content plan entry id"),
|
|
577
580
|
...projectIdArg
|
|
578
581
|
},
|
|
582
|
+
annotations: { title: "Regenerate Content Plan", readOnlyHint: false, destructiveHint: true },
|
|
579
583
|
async handler(args, ctx) {
|
|
580
584
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
581
585
|
return json(await ctx.client.regenerateContentPlan(projectId, String(args.plan_id)));
|
|
@@ -588,6 +592,7 @@ var toolDefinitions = [
|
|
|
588
592
|
plan_id: import_zod.z.string().describe("Content plan entry id (must be APPROVED)"),
|
|
589
593
|
...projectIdArg
|
|
590
594
|
},
|
|
595
|
+
annotations: { title: "Generate Article", readOnlyHint: false, destructiveHint: false },
|
|
591
596
|
async handler(args, ctx) {
|
|
592
597
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
593
598
|
return json(await ctx.client.generateArticleFromPlan(projectId, String(args.plan_id)));
|
|
@@ -601,7 +606,7 @@ var toolDefinitions = [
|
|
|
601
606
|
end_date: import_zod.z.string().describe("ISO date, e.g. 2026-09-30"),
|
|
602
607
|
...projectIdArg
|
|
603
608
|
},
|
|
604
|
-
annotations: { readOnlyHint: true },
|
|
609
|
+
annotations: { title: "Content Calendar", readOnlyHint: true, destructiveHint: false },
|
|
605
610
|
async handler(args, ctx) {
|
|
606
611
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
607
612
|
return json(
|
|
@@ -621,7 +626,7 @@ var toolDefinitions = [
|
|
|
621
626
|
status: import_zod.z.enum(ARTICLE_STATUSES).optional().describe("Filter by lifecycle status (default REVIEW)"),
|
|
622
627
|
...projectIdArg
|
|
623
628
|
},
|
|
624
|
-
annotations: { readOnlyHint: true },
|
|
629
|
+
annotations: { title: "Review Queue", readOnlyHint: true, destructiveHint: false },
|
|
625
630
|
async handler(args, ctx) {
|
|
626
631
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
627
632
|
const status = typeof args.status === "string" ? args.status : "REVIEW";
|
|
@@ -637,7 +642,7 @@ var toolDefinitions = [
|
|
|
637
642
|
include_logs: import_zod.z.boolean().optional().describe("Include pipeline phase logs (default false)"),
|
|
638
643
|
...projectIdArg
|
|
639
644
|
},
|
|
640
|
-
annotations: { readOnlyHint: true },
|
|
645
|
+
annotations: { title: "Get Article", readOnlyHint: true, destructiveHint: false },
|
|
641
646
|
async handler(args, ctx) {
|
|
642
647
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
643
648
|
const article = await ctx.client.getArticle(projectId, String(args.article_id));
|
|
@@ -659,6 +664,7 @@ var toolDefinitions = [
|
|
|
659
664
|
status: import_zod.z.enum(["DRAFT", "REVIEW", "APPROVED"]).optional(),
|
|
660
665
|
...projectIdArg
|
|
661
666
|
},
|
|
667
|
+
annotations: { title: "Update Article", readOnlyHint: false, destructiveHint: true },
|
|
662
668
|
async handler(args, ctx) {
|
|
663
669
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
664
670
|
const patch = {};
|
|
@@ -677,6 +683,12 @@ var toolDefinitions = [
|
|
|
677
683
|
publish_now: import_zod.z.boolean().optional().describe("Also trigger publishing now (default false)"),
|
|
678
684
|
...projectIdArg
|
|
679
685
|
},
|
|
686
|
+
annotations: {
|
|
687
|
+
title: "Approve & Publish",
|
|
688
|
+
readOnlyHint: false,
|
|
689
|
+
destructiveHint: true,
|
|
690
|
+
openWorldHint: true
|
|
691
|
+
},
|
|
680
692
|
async handler(args, ctx) {
|
|
681
693
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
682
694
|
const articleId = String(args.article_id);
|
|
@@ -695,6 +707,7 @@ var toolDefinitions = [
|
|
|
695
707
|
clear_schedule: import_zod.z.boolean().optional().describe("Clear any scheduled date instead of setting one"),
|
|
696
708
|
...projectIdArg
|
|
697
709
|
},
|
|
710
|
+
annotations: { title: "Schedule Publication", readOnlyHint: false, destructiveHint: false },
|
|
698
711
|
async handler(args, ctx) {
|
|
699
712
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
700
713
|
const value = args.clear_schedule === true ? null : args.scheduled_for ?? null;
|
|
@@ -709,7 +722,7 @@ var toolDefinitions = [
|
|
|
709
722
|
article_id: import_zod.z.string().describe("Article id"),
|
|
710
723
|
...projectIdArg
|
|
711
724
|
},
|
|
712
|
-
annotations: { destructiveHint: true },
|
|
725
|
+
annotations: { title: "Regenerate Article", readOnlyHint: false, destructiveHint: true },
|
|
713
726
|
async handler(args, ctx) {
|
|
714
727
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
715
728
|
return json(await ctx.client.regenerateArticle(projectId, String(args.article_id)));
|
|
@@ -723,6 +736,7 @@ var toolDefinitions = [
|
|
|
723
736
|
chapter_index: import_zod.z.number().int().min(0).describe("Zero-based chapter index"),
|
|
724
737
|
...projectIdArg
|
|
725
738
|
},
|
|
739
|
+
annotations: { title: "Regenerate Chapter", readOnlyHint: false, destructiveHint: true },
|
|
726
740
|
async handler(args, ctx) {
|
|
727
741
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
728
742
|
return json(
|
|
@@ -741,7 +755,7 @@ var toolDefinitions = [
|
|
|
741
755
|
article_id: import_zod.z.string().describe("Article id"),
|
|
742
756
|
...projectIdArg
|
|
743
757
|
},
|
|
744
|
-
annotations: { readOnlyHint: true },
|
|
758
|
+
annotations: { title: "Pipeline Logs", readOnlyHint: true, destructiveHint: false },
|
|
745
759
|
async handler(args, ctx) {
|
|
746
760
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
747
761
|
return json(await ctx.client.getPipelineLogs(projectId, String(args.article_id)));
|
|
@@ -751,7 +765,7 @@ var toolDefinitions = [
|
|
|
751
765
|
name: "list_refresh_suggestions",
|
|
752
766
|
description: "Across ALL your projects: published articles whose Search Console stats suggest they are decaying and would benefit from a refresh. Feed these back into planning via suggest_topics or update_article.",
|
|
753
767
|
inputSchema: {},
|
|
754
|
-
annotations: { readOnlyHint: true },
|
|
768
|
+
annotations: { title: "Refresh Suggestions", readOnlyHint: true, destructiveHint: false },
|
|
755
769
|
async handler(_args, ctx) {
|
|
756
770
|
return json(await ctx.client.listRefreshSuggestions());
|
|
757
771
|
}
|
|
@@ -761,7 +775,7 @@ var toolDefinitions = [
|
|
|
761
775
|
name: "list_integrations",
|
|
762
776
|
description: "List configured publishing targets (integrations) for a project: WEBHOOK, WORDPRESS, GHOST, WEBFLOW, SHOPIFY, DEVTO, SANITY, CUSTOM_API \u2014 with enabled state.",
|
|
763
777
|
inputSchema: { ...projectIdArg },
|
|
764
|
-
annotations: { readOnlyHint: true },
|
|
778
|
+
annotations: { title: "List Integrations", readOnlyHint: true, destructiveHint: false },
|
|
765
779
|
async handler(args, ctx) {
|
|
766
780
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
767
781
|
const integrations = await ctx.client.listIntegrations(projectId);
|
|
@@ -778,6 +792,12 @@ var toolDefinitions = [
|
|
|
778
792
|
method: import_zod.z.enum(["POST", "PUT", "PATCH"]).optional().describe("HTTP method (default POST)"),
|
|
779
793
|
...projectIdArg
|
|
780
794
|
},
|
|
795
|
+
annotations: {
|
|
796
|
+
title: "Create Webhook Integration",
|
|
797
|
+
readOnlyHint: false,
|
|
798
|
+
destructiveHint: false,
|
|
799
|
+
openWorldHint: true
|
|
800
|
+
},
|
|
781
801
|
async handler(args, ctx) {
|
|
782
802
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
783
803
|
const config = { url: String(args.url) };
|
|
@@ -801,6 +821,12 @@ var toolDefinitions = [
|
|
|
801
821
|
mode: import_zod.z.enum(["ping", "full"]).optional(),
|
|
802
822
|
...projectIdArg
|
|
803
823
|
},
|
|
824
|
+
annotations: {
|
|
825
|
+
title: "Test Integration",
|
|
826
|
+
readOnlyHint: false,
|
|
827
|
+
destructiveHint: false,
|
|
828
|
+
openWorldHint: true
|
|
829
|
+
},
|
|
804
830
|
async handler(args, ctx) {
|
|
805
831
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
806
832
|
return json(
|
|
@@ -820,6 +846,12 @@ var toolDefinitions = [
|
|
|
820
846
|
integration_id: import_zod.z.string().describe("Target integration id"),
|
|
821
847
|
...projectIdArg
|
|
822
848
|
},
|
|
849
|
+
annotations: {
|
|
850
|
+
title: "Publish to CMS",
|
|
851
|
+
readOnlyHint: false,
|
|
852
|
+
destructiveHint: true,
|
|
853
|
+
openWorldHint: true
|
|
854
|
+
},
|
|
823
855
|
async handler(args, ctx) {
|
|
824
856
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
825
857
|
return json(
|
|
@@ -839,6 +871,12 @@ var toolDefinitions = [
|
|
|
839
871
|
integration_id: import_zod.z.string(),
|
|
840
872
|
...projectIdArg
|
|
841
873
|
},
|
|
874
|
+
annotations: {
|
|
875
|
+
title: "Retry Publish",
|
|
876
|
+
readOnlyHint: false,
|
|
877
|
+
destructiveHint: true,
|
|
878
|
+
openWorldHint: true
|
|
879
|
+
},
|
|
842
880
|
async handler(args, ctx) {
|
|
843
881
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
844
882
|
return json(
|
|
@@ -858,7 +896,7 @@ var toolDefinitions = [
|
|
|
858
896
|
limit: import_zod.z.number().int().min(1).max(200).optional(),
|
|
859
897
|
...projectIdArg
|
|
860
898
|
},
|
|
861
|
-
annotations: { readOnlyHint: true },
|
|
899
|
+
annotations: { title: "Publish Logs", readOnlyHint: true, destructiveHint: false },
|
|
862
900
|
async handler(args, ctx) {
|
|
863
901
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
864
902
|
return json(
|
|
@@ -875,7 +913,7 @@ var toolDefinitions = [
|
|
|
875
913
|
name: "list_keywords",
|
|
876
914
|
description: "List tracked keywords for a project (search volume, difficulty, intent, status). Keywords drive topic relevance in generation.",
|
|
877
915
|
inputSchema: { ...projectIdArg },
|
|
878
|
-
annotations: { readOnlyHint: true },
|
|
916
|
+
annotations: { title: "List Keywords", readOnlyHint: true, destructiveHint: false },
|
|
879
917
|
async handler(args, ctx) {
|
|
880
918
|
return json(await ctx.client.listKeywords(resolveProjectId(ctx, args.project_id)));
|
|
881
919
|
}
|
|
@@ -890,6 +928,7 @@ var toolDefinitions = [
|
|
|
890
928
|
intent: import_zod.z.enum(["INFORMATIONAL", "NAVIGATIONAL", "TRANSACTIONAL", "COMMERCIAL"]).optional(),
|
|
891
929
|
...projectIdArg
|
|
892
930
|
},
|
|
931
|
+
annotations: { title: "Add Keyword", readOnlyHint: false, destructiveHint: false },
|
|
893
932
|
async handler(args, ctx) {
|
|
894
933
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
895
934
|
return json(
|
|
@@ -909,7 +948,7 @@ var toolDefinitions = [
|
|
|
909
948
|
active_only: import_zod.z.boolean().optional().describe("Only active facts (default false = all)"),
|
|
910
949
|
...projectIdArg
|
|
911
950
|
},
|
|
912
|
-
annotations: { readOnlyHint: true },
|
|
951
|
+
annotations: { title: "List Product Facts", readOnlyHint: true, destructiveHint: false },
|
|
913
952
|
async handler(args, ctx) {
|
|
914
953
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
915
954
|
return json(
|
|
@@ -927,6 +966,7 @@ var toolDefinitions = [
|
|
|
927
966
|
active: import_zod.z.boolean().optional().describe("Set active flag when updating"),
|
|
928
967
|
...projectIdArg
|
|
929
968
|
},
|
|
969
|
+
annotations: { title: "Supply Product Fact", readOnlyHint: false, destructiveHint: false },
|
|
930
970
|
async handler(args, ctx) {
|
|
931
971
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
932
972
|
const category = Array.isArray(args.category) ? args.category.map(String) : void 0;
|
|
@@ -957,6 +997,12 @@ var toolDefinitions = [
|
|
|
957
997
|
limit: import_zod.z.number().int().min(1).max(500).optional().describe("Max articles to export (default 100)"),
|
|
958
998
|
...projectIdArg
|
|
959
999
|
},
|
|
1000
|
+
annotations: {
|
|
1001
|
+
title: "Export Blog to Files",
|
|
1002
|
+
readOnlyHint: false,
|
|
1003
|
+
destructiveHint: true,
|
|
1004
|
+
openWorldHint: true
|
|
1005
|
+
},
|
|
960
1006
|
async handler(args, ctx) {
|
|
961
1007
|
const projectId = resolveProjectId(ctx, args.project_id);
|
|
962
1008
|
const status = typeof args.status === "string" ? args.status : "PUBLISHED";
|
|
@@ -993,10 +1039,12 @@ function buildServer(config) {
|
|
|
993
1039
|
register(
|
|
994
1040
|
tool.name,
|
|
995
1041
|
{
|
|
996
|
-
title
|
|
1042
|
+
// The human-readable title, not the wire name — a picker showing
|
|
1043
|
+
// "approve_publication" tells a person nothing about what it does.
|
|
1044
|
+
title: tool.annotations.title,
|
|
997
1045
|
description: tool.description,
|
|
998
1046
|
inputSchema: tool.inputSchema,
|
|
999
|
-
|
|
1047
|
+
annotations: tool.annotations
|
|
1000
1048
|
},
|
|
1001
1049
|
async (args) => {
|
|
1002
1050
|
let result;
|