@ainyc/canonry 4.57.0 → 4.59.0
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/assets/agent-workspace/skills/canonry/SKILL.md +7 -0
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +44 -0
- package/assets/agent-workspace/skills/canonry/references/google-business-profile.md +219 -0
- package/assets/assets/{BacklinksPage-CmeFZ8UJ.js → BacklinksPage-D_mc7c-b.js} +1 -1
- package/assets/assets/{ChartPrimitives-D7C1Cp8w.js → ChartPrimitives-BViWneKX.js} +1 -1
- package/assets/assets/{ProjectPage-Y6uCyjGb.js → ProjectPage-_hpYJAN1.js} +1 -1
- package/assets/assets/{RunRow-BntNdrgM.js → RunRow-DK69_0iD.js} +1 -1
- package/assets/assets/{RunsPage-Btp6qn10.js → RunsPage-DRu1peAA.js} +1 -1
- package/assets/assets/{SettingsPage-DkyNiU2i.js → SettingsPage-BrednApH.js} +1 -1
- package/assets/assets/{TrafficPage-CBl4Mwdc.js → TrafficPage-oFA65ZZc.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-BZzuWCn-.js → TrafficSourceDetailPage-CUzzaYFC.js} +1 -1
- package/assets/assets/{extract-error-message-De8_qAzs.js → extract-error-message-Cv4MXGtB.js} +1 -1
- package/assets/assets/{index-XUKhruAg.js → index-BrCh3uvb.js} +90 -90
- package/assets/assets/{server-traffic-bn9LSZN9.js → server-traffic-rYE-NlE-.js} +1 -1
- package/assets/assets/{trash-2-B5clF2rU.js → trash-2-BgGGPjQf.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-4KWPOVIT.js → chunk-JW6TQFU7.js} +171 -1
- package/dist/{chunk-WFVUZVJD.js → chunk-LPPW7O26.js} +1421 -1190
- package/dist/{chunk-HL6JZUEW.js → chunk-NOQ4ZE3E.js} +2158 -624
- package/dist/{chunk-6X5TF73A.js → chunk-TFBPLY77.js} +414 -1
- package/dist/cli.js +610 -458
- package/dist/index.d.ts +2 -1
- package/dist/index.js +4 -4
- package/dist/{intelligence-service-NY3MAVPB.js → intelligence-service-V4SWVKEQ.js} +2 -2
- package/dist/mcp.js +10 -8
- package/package.json +8 -7
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
trafficConnectVercelRequestSchema,
|
|
23
23
|
trafficConnectWordpressRequestSchema,
|
|
24
24
|
trafficEventKindSchema
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-LPPW7O26.js";
|
|
26
26
|
|
|
27
27
|
// src/config.ts
|
|
28
28
|
import fs from "fs";
|
|
@@ -2021,6 +2021,150 @@ var postApiV1ProjectsByNameGoogleIndexingRequest = (options) => {
|
|
|
2021
2021
|
}
|
|
2022
2022
|
});
|
|
2023
2023
|
};
|
|
2024
|
+
var postApiV1ProjectsByNameGbpLocationsDiscover = (options) => {
|
|
2025
|
+
return (options.client ?? client).post({
|
|
2026
|
+
security: [
|
|
2027
|
+
{
|
|
2028
|
+
scheme: "bearer",
|
|
2029
|
+
type: "http"
|
|
2030
|
+
}
|
|
2031
|
+
],
|
|
2032
|
+
url: "/api/v1/projects/{name}/gbp/locations/discover",
|
|
2033
|
+
...options,
|
|
2034
|
+
headers: {
|
|
2035
|
+
"Content-Type": "application/json",
|
|
2036
|
+
...options.headers
|
|
2037
|
+
}
|
|
2038
|
+
});
|
|
2039
|
+
};
|
|
2040
|
+
var getApiV1ProjectsByNameGbpAccounts = (options) => {
|
|
2041
|
+
return (options.client ?? client).get({
|
|
2042
|
+
security: [
|
|
2043
|
+
{
|
|
2044
|
+
scheme: "bearer",
|
|
2045
|
+
type: "http"
|
|
2046
|
+
}
|
|
2047
|
+
],
|
|
2048
|
+
url: "/api/v1/projects/{name}/gbp/accounts",
|
|
2049
|
+
...options
|
|
2050
|
+
});
|
|
2051
|
+
};
|
|
2052
|
+
var getApiV1ProjectsByNameGbpLocations = (options) => {
|
|
2053
|
+
return (options.client ?? client).get({
|
|
2054
|
+
security: [
|
|
2055
|
+
{
|
|
2056
|
+
scheme: "bearer",
|
|
2057
|
+
type: "http"
|
|
2058
|
+
}
|
|
2059
|
+
],
|
|
2060
|
+
url: "/api/v1/projects/{name}/gbp/locations",
|
|
2061
|
+
...options
|
|
2062
|
+
});
|
|
2063
|
+
};
|
|
2064
|
+
var putApiV1ProjectsByNameGbpLocationsByLocationNameSelection = (options) => {
|
|
2065
|
+
return (options.client ?? client).put({
|
|
2066
|
+
security: [
|
|
2067
|
+
{
|
|
2068
|
+
scheme: "bearer",
|
|
2069
|
+
type: "http"
|
|
2070
|
+
}
|
|
2071
|
+
],
|
|
2072
|
+
url: "/api/v1/projects/{name}/gbp/locations/{locationName}/selection",
|
|
2073
|
+
...options,
|
|
2074
|
+
headers: {
|
|
2075
|
+
"Content-Type": "application/json",
|
|
2076
|
+
...options.headers
|
|
2077
|
+
}
|
|
2078
|
+
});
|
|
2079
|
+
};
|
|
2080
|
+
var deleteApiV1ProjectsByNameGbpConnection = (options) => {
|
|
2081
|
+
return (options.client ?? client).delete({
|
|
2082
|
+
security: [
|
|
2083
|
+
{
|
|
2084
|
+
scheme: "bearer",
|
|
2085
|
+
type: "http"
|
|
2086
|
+
}
|
|
2087
|
+
],
|
|
2088
|
+
url: "/api/v1/projects/{name}/gbp/connection",
|
|
2089
|
+
...options
|
|
2090
|
+
});
|
|
2091
|
+
};
|
|
2092
|
+
var postApiV1ProjectsByNameGbpSync = (options) => {
|
|
2093
|
+
return (options.client ?? client).post({
|
|
2094
|
+
security: [
|
|
2095
|
+
{
|
|
2096
|
+
scheme: "bearer",
|
|
2097
|
+
type: "http"
|
|
2098
|
+
}
|
|
2099
|
+
],
|
|
2100
|
+
url: "/api/v1/projects/{name}/gbp/sync",
|
|
2101
|
+
...options,
|
|
2102
|
+
headers: {
|
|
2103
|
+
"Content-Type": "application/json",
|
|
2104
|
+
...options.headers
|
|
2105
|
+
}
|
|
2106
|
+
});
|
|
2107
|
+
};
|
|
2108
|
+
var getApiV1ProjectsByNameGbpMetrics = (options) => {
|
|
2109
|
+
return (options.client ?? client).get({
|
|
2110
|
+
security: [
|
|
2111
|
+
{
|
|
2112
|
+
scheme: "bearer",
|
|
2113
|
+
type: "http"
|
|
2114
|
+
}
|
|
2115
|
+
],
|
|
2116
|
+
url: "/api/v1/projects/{name}/gbp/metrics",
|
|
2117
|
+
...options
|
|
2118
|
+
});
|
|
2119
|
+
};
|
|
2120
|
+
var getApiV1ProjectsByNameGbpKeywords = (options) => {
|
|
2121
|
+
return (options.client ?? client).get({
|
|
2122
|
+
security: [
|
|
2123
|
+
{
|
|
2124
|
+
scheme: "bearer",
|
|
2125
|
+
type: "http"
|
|
2126
|
+
}
|
|
2127
|
+
],
|
|
2128
|
+
url: "/api/v1/projects/{name}/gbp/keywords",
|
|
2129
|
+
...options
|
|
2130
|
+
});
|
|
2131
|
+
};
|
|
2132
|
+
var getApiV1ProjectsByNameGbpPlaceActions = (options) => {
|
|
2133
|
+
return (options.client ?? client).get({
|
|
2134
|
+
security: [
|
|
2135
|
+
{
|
|
2136
|
+
scheme: "bearer",
|
|
2137
|
+
type: "http"
|
|
2138
|
+
}
|
|
2139
|
+
],
|
|
2140
|
+
url: "/api/v1/projects/{name}/gbp/place-actions",
|
|
2141
|
+
...options
|
|
2142
|
+
});
|
|
2143
|
+
};
|
|
2144
|
+
var getApiV1ProjectsByNameGbpLodging = (options) => {
|
|
2145
|
+
return (options.client ?? client).get({
|
|
2146
|
+
security: [
|
|
2147
|
+
{
|
|
2148
|
+
scheme: "bearer",
|
|
2149
|
+
type: "http"
|
|
2150
|
+
}
|
|
2151
|
+
],
|
|
2152
|
+
url: "/api/v1/projects/{name}/gbp/lodging",
|
|
2153
|
+
...options
|
|
2154
|
+
});
|
|
2155
|
+
};
|
|
2156
|
+
var getApiV1ProjectsByNameGbpSummary = (options) => {
|
|
2157
|
+
return (options.client ?? client).get({
|
|
2158
|
+
security: [
|
|
2159
|
+
{
|
|
2160
|
+
scheme: "bearer",
|
|
2161
|
+
type: "http"
|
|
2162
|
+
}
|
|
2163
|
+
],
|
|
2164
|
+
url: "/api/v1/projects/{name}/gbp/summary",
|
|
2165
|
+
...options
|
|
2166
|
+
});
|
|
2167
|
+
};
|
|
2024
2168
|
var postApiV1ProjectsByNameBingConnect = (options) => {
|
|
2025
2169
|
return (options.client ?? client).post({
|
|
2026
2170
|
security: [
|
|
@@ -3800,6 +3944,105 @@ var ApiClient = class {
|
|
|
3800
3944
|
})
|
|
3801
3945
|
);
|
|
3802
3946
|
}
|
|
3947
|
+
// Google Business Profile (Phase 1: auth + discovery)
|
|
3948
|
+
async listGbpAccounts(project) {
|
|
3949
|
+
return this.invoke(
|
|
3950
|
+
() => getApiV1ProjectsByNameGbpAccounts({
|
|
3951
|
+
client: this.heyClient,
|
|
3952
|
+
path: { name: project }
|
|
3953
|
+
})
|
|
3954
|
+
);
|
|
3955
|
+
}
|
|
3956
|
+
async discoverGbpLocations(project, body) {
|
|
3957
|
+
return this.invoke(
|
|
3958
|
+
() => postApiV1ProjectsByNameGbpLocationsDiscover({
|
|
3959
|
+
client: this.heyClient,
|
|
3960
|
+
path: { name: project },
|
|
3961
|
+
body: body ?? {}
|
|
3962
|
+
})
|
|
3963
|
+
);
|
|
3964
|
+
}
|
|
3965
|
+
async listGbpLocations(project, opts) {
|
|
3966
|
+
return this.invoke(
|
|
3967
|
+
() => getApiV1ProjectsByNameGbpLocations({
|
|
3968
|
+
client: this.heyClient,
|
|
3969
|
+
path: { name: project },
|
|
3970
|
+
query: opts?.selected === void 0 ? void 0 : { selected: String(opts.selected) }
|
|
3971
|
+
})
|
|
3972
|
+
);
|
|
3973
|
+
}
|
|
3974
|
+
async setGbpLocationSelection(project, locationName, selected) {
|
|
3975
|
+
return this.invoke(
|
|
3976
|
+
() => putApiV1ProjectsByNameGbpLocationsByLocationNameSelection({
|
|
3977
|
+
client: this.heyClient,
|
|
3978
|
+
path: { name: project, locationName },
|
|
3979
|
+
body: { selected }
|
|
3980
|
+
})
|
|
3981
|
+
);
|
|
3982
|
+
}
|
|
3983
|
+
async disconnectGbp(project) {
|
|
3984
|
+
await this.invoke(
|
|
3985
|
+
() => deleteApiV1ProjectsByNameGbpConnection({
|
|
3986
|
+
client: this.heyClient,
|
|
3987
|
+
path: { name: project }
|
|
3988
|
+
})
|
|
3989
|
+
);
|
|
3990
|
+
}
|
|
3991
|
+
async triggerGbpSync(project, body) {
|
|
3992
|
+
return this.invoke(
|
|
3993
|
+
() => postApiV1ProjectsByNameGbpSync({
|
|
3994
|
+
client: this.heyClient,
|
|
3995
|
+
path: { name: project },
|
|
3996
|
+
body: body ?? {}
|
|
3997
|
+
})
|
|
3998
|
+
);
|
|
3999
|
+
}
|
|
4000
|
+
async listGbpMetrics(project, opts) {
|
|
4001
|
+
return this.invoke(
|
|
4002
|
+
() => getApiV1ProjectsByNameGbpMetrics({
|
|
4003
|
+
client: this.heyClient,
|
|
4004
|
+
path: { name: project },
|
|
4005
|
+
query: opts && (opts.locationName || opts.metric) ? opts : void 0
|
|
4006
|
+
})
|
|
4007
|
+
);
|
|
4008
|
+
}
|
|
4009
|
+
async listGbpKeywords(project, opts) {
|
|
4010
|
+
return this.invoke(
|
|
4011
|
+
() => getApiV1ProjectsByNameGbpKeywords({
|
|
4012
|
+
client: this.heyClient,
|
|
4013
|
+
path: { name: project },
|
|
4014
|
+
query: opts?.locationName ? { locationName: opts.locationName } : void 0
|
|
4015
|
+
})
|
|
4016
|
+
);
|
|
4017
|
+
}
|
|
4018
|
+
async listGbpPlaceActions(project, opts) {
|
|
4019
|
+
return this.invoke(
|
|
4020
|
+
() => getApiV1ProjectsByNameGbpPlaceActions({
|
|
4021
|
+
client: this.heyClient,
|
|
4022
|
+
path: { name: project },
|
|
4023
|
+
query: opts?.locationName ? { locationName: opts.locationName } : void 0
|
|
4024
|
+
})
|
|
4025
|
+
);
|
|
4026
|
+
}
|
|
4027
|
+
async listGbpLodging(project, opts) {
|
|
4028
|
+
return this.invoke(
|
|
4029
|
+
() => getApiV1ProjectsByNameGbpLodging({
|
|
4030
|
+
client: this.heyClient,
|
|
4031
|
+
path: { name: project },
|
|
4032
|
+
query: opts?.locationName ? { locationName: opts.locationName } : void 0
|
|
4033
|
+
})
|
|
4034
|
+
);
|
|
4035
|
+
}
|
|
4036
|
+
async getGbpSummary(project, opts) {
|
|
4037
|
+
return this.invoke(
|
|
4038
|
+
() => getApiV1ProjectsByNameGbpSummary({
|
|
4039
|
+
client: this.heyClient,
|
|
4040
|
+
path: { name: project },
|
|
4041
|
+
query: opts?.locationName ? { locationName: opts.locationName } : void 0
|
|
4042
|
+
})
|
|
4043
|
+
);
|
|
4044
|
+
}
|
|
4045
|
+
// GSC data
|
|
3803
4046
|
async gscSync(project, body) {
|
|
3804
4047
|
return this.invoke(
|
|
3805
4048
|
() => postApiV1ProjectsByNameGoogleGscSync({
|
|
@@ -4524,6 +4767,11 @@ var ApiClient = class {
|
|
|
4524
4767
|
}
|
|
4525
4768
|
};
|
|
4526
4769
|
|
|
4770
|
+
// src/package-version.ts
|
|
4771
|
+
import { createRequire } from "module";
|
|
4772
|
+
var _require = createRequire(import.meta.url);
|
|
4773
|
+
var PACKAGE_VERSION = _require("../package.json").version;
|
|
4774
|
+
|
|
4527
4775
|
// src/mcp/tool-registry.ts
|
|
4528
4776
|
import { z as z2 } from "zod";
|
|
4529
4777
|
|
|
@@ -4663,6 +4911,39 @@ var queryGenerateInputSchema = z2.object({
|
|
|
4663
4911
|
project: projectNameSchema,
|
|
4664
4912
|
request: queryGenerateRequestSchema
|
|
4665
4913
|
});
|
|
4914
|
+
var gbpListLocationsInputSchema = z2.object({
|
|
4915
|
+
project: projectNameSchema,
|
|
4916
|
+
selected: z2.boolean().optional()
|
|
4917
|
+
});
|
|
4918
|
+
var gbpDiscoverInputSchema = z2.object({
|
|
4919
|
+
project: projectNameSchema,
|
|
4920
|
+
selectAllNew: z2.boolean().optional().default(true),
|
|
4921
|
+
accountName: z2.string().regex(/^accounts\//, 'accountName must be a Google resource name like "accounts/12345"').optional(),
|
|
4922
|
+
switchAccount: z2.boolean().optional().default(false)
|
|
4923
|
+
});
|
|
4924
|
+
var gbpLocationSelectionInputSchema = z2.object({
|
|
4925
|
+
project: projectNameSchema,
|
|
4926
|
+
locationName: z2.string().min(1).regex(/^locations\//, 'locationName must be a Google resource name like "locations/12345"'),
|
|
4927
|
+
selected: z2.boolean()
|
|
4928
|
+
});
|
|
4929
|
+
var gbpSyncInputSchema = z2.object({
|
|
4930
|
+
project: projectNameSchema,
|
|
4931
|
+
locationNames: z2.array(z2.string()).optional(),
|
|
4932
|
+
daysOfMetrics: z2.number().int().positive().max(540).optional(),
|
|
4933
|
+
monthsOfKeywords: z2.number().int().positive().max(18).optional()
|
|
4934
|
+
});
|
|
4935
|
+
var gbpMetricsInputSchema = z2.object({
|
|
4936
|
+
project: projectNameSchema,
|
|
4937
|
+
locationName: z2.string().optional(),
|
|
4938
|
+
metric: z2.string().optional()
|
|
4939
|
+
});
|
|
4940
|
+
var gbpLocationScopedInputSchema = z2.object({
|
|
4941
|
+
project: projectNameSchema,
|
|
4942
|
+
locationName: z2.string().optional()
|
|
4943
|
+
});
|
|
4944
|
+
var gbpAccountsInputSchema = z2.object({
|
|
4945
|
+
project: projectNameSchema
|
|
4946
|
+
});
|
|
4666
4947
|
var keywordsInputSchema = z2.object({
|
|
4667
4948
|
project: projectNameSchema,
|
|
4668
4949
|
request: keywordBatchRequestSchema
|
|
@@ -5318,6 +5599,137 @@ var canonryMcpTools = [
|
|
|
5318
5599
|
openApiOperations: ["GET /api/v1/projects/{name}/ga/session-history"],
|
|
5319
5600
|
handler: (client2, input) => client2.gaSessionHistory(input.project, compactStringParams(input, ["window"]))
|
|
5320
5601
|
}),
|
|
5602
|
+
// ----- Google Business Profile (Phase 1: auth + discovery) -----
|
|
5603
|
+
defineTool({
|
|
5604
|
+
name: "canonry_gbp_accounts",
|
|
5605
|
+
title: "List Google Business Profile accounts",
|
|
5606
|
+
description: "List the Google Business Profile accounts the connected OAuth user can access. Use this to pick which account a project should track via canonry_gbp_locations_discover (accountName).",
|
|
5607
|
+
access: "read",
|
|
5608
|
+
tier: "gbp",
|
|
5609
|
+
inputSchema: gbpAccountsInputSchema,
|
|
5610
|
+
annotations: readAnnotations(),
|
|
5611
|
+
openApiOperations: ["GET /api/v1/projects/{name}/gbp/accounts"],
|
|
5612
|
+
handler: (client2, input) => client2.listGbpAccounts(input.project)
|
|
5613
|
+
}),
|
|
5614
|
+
defineTool({
|
|
5615
|
+
name: "canonry_gbp_locations",
|
|
5616
|
+
title: "List Google Business Profile locations",
|
|
5617
|
+
description: "List discovered Google Business Profile locations for a Canonry project, including their selection state.",
|
|
5618
|
+
access: "read",
|
|
5619
|
+
tier: "gbp",
|
|
5620
|
+
inputSchema: gbpListLocationsInputSchema,
|
|
5621
|
+
annotations: readAnnotations(),
|
|
5622
|
+
openApiOperations: ["GET /api/v1/projects/{name}/gbp/locations"],
|
|
5623
|
+
handler: (client2, input) => client2.listGbpLocations(input.project, input.selected === void 0 ? void 0 : { selected: input.selected })
|
|
5624
|
+
}),
|
|
5625
|
+
defineTool({
|
|
5626
|
+
name: "canonry_gbp_locations_discover",
|
|
5627
|
+
title: "Discover Google Business Profile locations",
|
|
5628
|
+
description: 'Re-discover Google Business Profile locations from Google and upsert them. New locations get the default selection state from `selectAllNew`; existing locations keep their selection. Pass `accountName` ("accounts/{n}", from canonry_gbp_accounts) to target a specific account; switching a project to a DIFFERENT account is destructive and requires `switchAccount: true`.',
|
|
5629
|
+
access: "write",
|
|
5630
|
+
tier: "gbp",
|
|
5631
|
+
inputSchema: gbpDiscoverInputSchema,
|
|
5632
|
+
annotations: writeAnnotations({ idempotentHint: true }),
|
|
5633
|
+
openApiOperations: ["POST /api/v1/projects/{name}/gbp/locations/discover"],
|
|
5634
|
+
handler: (client2, input) => client2.discoverGbpLocations(input.project, {
|
|
5635
|
+
selectAllNew: input.selectAllNew,
|
|
5636
|
+
accountName: input.accountName,
|
|
5637
|
+
switchAccount: input.switchAccount
|
|
5638
|
+
})
|
|
5639
|
+
}),
|
|
5640
|
+
defineTool({
|
|
5641
|
+
name: "canonry_gbp_location_select",
|
|
5642
|
+
title: "Toggle GBP location selection",
|
|
5643
|
+
description: "Mark a Google Business Profile location as selected or deselected for sync.",
|
|
5644
|
+
access: "write",
|
|
5645
|
+
tier: "gbp",
|
|
5646
|
+
inputSchema: gbpLocationSelectionInputSchema,
|
|
5647
|
+
annotations: writeAnnotations({ idempotentHint: true }),
|
|
5648
|
+
openApiOperations: ["PUT /api/v1/projects/{name}/gbp/locations/{locationName}/selection"],
|
|
5649
|
+
handler: (client2, input) => client2.setGbpLocationSelection(input.project, input.locationName, input.selected)
|
|
5650
|
+
}),
|
|
5651
|
+
defineTool({
|
|
5652
|
+
name: "canonry_gbp_disconnect",
|
|
5653
|
+
title: "Disconnect Google Business Profile",
|
|
5654
|
+
description: "Remove the Google Business Profile OAuth connection and all discovered locations for a project.",
|
|
5655
|
+
access: "write",
|
|
5656
|
+
tier: "gbp",
|
|
5657
|
+
inputSchema: projectInputSchema,
|
|
5658
|
+
annotations: writeAnnotations({ idempotentHint: true, destructiveHint: true }),
|
|
5659
|
+
openApiOperations: ["DELETE /api/v1/projects/{name}/gbp/connection"],
|
|
5660
|
+
handler: (client2, input) => client2.disconnectGbp(input.project)
|
|
5661
|
+
}),
|
|
5662
|
+
// ----- Google Business Profile (Phase 2: performance sync) -----
|
|
5663
|
+
defineTool({
|
|
5664
|
+
name: "canonry_gbp_sync",
|
|
5665
|
+
title: "Sync Google Business Profile performance",
|
|
5666
|
+
description: "Trigger a GBP performance sync (daily metrics + monthly keyword impressions) for the project's selected locations. Returns the run id; poll canonry_run_get for status.",
|
|
5667
|
+
access: "write",
|
|
5668
|
+
tier: "gbp",
|
|
5669
|
+
inputSchema: gbpSyncInputSchema,
|
|
5670
|
+
annotations: writeAnnotations({ idempotentHint: true }),
|
|
5671
|
+
openApiOperations: ["POST /api/v1/projects/{name}/gbp/sync"],
|
|
5672
|
+
handler: (client2, input) => client2.triggerGbpSync(input.project, {
|
|
5673
|
+
locationNames: input.locationNames,
|
|
5674
|
+
daysOfMetrics: input.daysOfMetrics,
|
|
5675
|
+
monthsOfKeywords: input.monthsOfKeywords
|
|
5676
|
+
})
|
|
5677
|
+
}),
|
|
5678
|
+
defineTool({
|
|
5679
|
+
name: "canonry_gbp_metrics",
|
|
5680
|
+
title: "Get GBP daily metrics",
|
|
5681
|
+
description: "List stored Google Business Profile daily performance metrics (impressions, direction requests, website/call clicks) for a project.",
|
|
5682
|
+
access: "read",
|
|
5683
|
+
tier: "gbp",
|
|
5684
|
+
inputSchema: gbpMetricsInputSchema,
|
|
5685
|
+
annotations: readAnnotations(),
|
|
5686
|
+
openApiOperations: ["GET /api/v1/projects/{name}/gbp/metrics"],
|
|
5687
|
+
handler: (client2, input) => client2.listGbpMetrics(input.project, compactStringParams(input, ["locationName", "metric"]))
|
|
5688
|
+
}),
|
|
5689
|
+
defineTool({
|
|
5690
|
+
name: "canonry_gbp_keywords",
|
|
5691
|
+
title: "Get GBP keyword impressions",
|
|
5692
|
+
description: "List stored Google Business Profile monthly search-keyword impressions for a project. Includes a thresholdedPct (share privacy-redacted by Google).",
|
|
5693
|
+
access: "read",
|
|
5694
|
+
tier: "gbp",
|
|
5695
|
+
inputSchema: gbpLocationScopedInputSchema,
|
|
5696
|
+
annotations: readAnnotations(),
|
|
5697
|
+
openApiOperations: ["GET /api/v1/projects/{name}/gbp/keywords"],
|
|
5698
|
+
handler: (client2, input) => client2.listGbpKeywords(input.project, compactStringParams(input, ["locationName"]))
|
|
5699
|
+
}),
|
|
5700
|
+
defineTool({
|
|
5701
|
+
name: "canonry_gbp_place_actions",
|
|
5702
|
+
title: "Get GBP place actions",
|
|
5703
|
+
description: "List stored Google Business Profile place action links (booking / reservation / order CTAs) for a project.",
|
|
5704
|
+
access: "read",
|
|
5705
|
+
tier: "gbp",
|
|
5706
|
+
inputSchema: gbpLocationScopedInputSchema,
|
|
5707
|
+
annotations: readAnnotations(),
|
|
5708
|
+
openApiOperations: ["GET /api/v1/projects/{name}/gbp/place-actions"],
|
|
5709
|
+
handler: (client2, input) => client2.listGbpPlaceActions(input.project, compactStringParams(input, ["locationName"]))
|
|
5710
|
+
}),
|
|
5711
|
+
defineTool({
|
|
5712
|
+
name: "canonry_gbp_lodging",
|
|
5713
|
+
title: "Get GBP lodging attributes",
|
|
5714
|
+
description: "List the latest Google Business Profile lodging snapshot per location (hotel structured attributes). populatedGroupCount=0 means an empty profile \u2014 an AEO gap.",
|
|
5715
|
+
access: "read",
|
|
5716
|
+
tier: "gbp",
|
|
5717
|
+
inputSchema: gbpLocationScopedInputSchema,
|
|
5718
|
+
annotations: readAnnotations(),
|
|
5719
|
+
openApiOperations: ["GET /api/v1/projects/{name}/gbp/lodging"],
|
|
5720
|
+
handler: (client2, input) => client2.listGbpLodging(input.project, compactStringParams(input, ["locationName"]))
|
|
5721
|
+
}),
|
|
5722
|
+
defineTool({
|
|
5723
|
+
name: "canonry_gbp_summary",
|
|
5724
|
+
title: "Get GBP local-AEO summary",
|
|
5725
|
+
description: "Composite Google Business Profile summary for a project: performance totals + 7d deltas, keyword thresholded %, place-action CTA presence, and lodging coverage. All derived numbers computed server-side.",
|
|
5726
|
+
access: "read",
|
|
5727
|
+
tier: "gbp",
|
|
5728
|
+
inputSchema: gbpLocationScopedInputSchema,
|
|
5729
|
+
annotations: readAnnotations(),
|
|
5730
|
+
openApiOperations: ["GET /api/v1/projects/{name}/gbp/summary"],
|
|
5731
|
+
handler: (client2, input) => client2.getGbpSummary(input.project, compactStringParams(input, ["locationName"]))
|
|
5732
|
+
}),
|
|
5321
5733
|
defineTool({
|
|
5322
5734
|
name: "canonry_traffic_sources_list",
|
|
5323
5735
|
title: "List traffic sources",
|
|
@@ -5820,5 +6232,6 @@ export {
|
|
|
5820
6232
|
printCliError,
|
|
5821
6233
|
createApiClient,
|
|
5822
6234
|
ApiClient,
|
|
6235
|
+
PACKAGE_VERSION,
|
|
5823
6236
|
canonryMcpTools
|
|
5824
6237
|
};
|