Skip to content

Commit 140f473

Browse files
committed
add radar_get_traffic_anomalies tool
1 parent f2940df commit 140f473

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

packages/mcp-common/src/tools/radar.ts

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { getCloudflareClient } from '../cloudflare-api'
22
import { type CloudflareMcpAgent } from '../types/cloudflare-mcp-agent'
3-
import { AsnParam, AsOrderByParam, IpParam, SingleLocationParam } from '../types/radar'
3+
import { AsnParam, AsOrderByParam, DateRangeParam, IpParam, SingleLocationParam } from '../types/radar'
44
import { PaginationLimitParam, PaginationOffsetParam } from '../types/shared'
55

66
export function registerRadarTools(agent: CloudflareMcpAgent) {
@@ -113,4 +113,49 @@ export function registerRadarTools(agent: CloudflareMcpAgent) {
113113
}
114114
}
115115
)
116+
117+
agent.server.tool(
118+
'radar_get_traffic_anomalies',
119+
'Get traffic anomalies',
120+
{
121+
limit: PaginationLimitParam,
122+
offset: PaginationOffsetParam,
123+
asn: AsnParam.optional(),
124+
location: SingleLocationParam,
125+
dateRange: DateRangeParam
126+
},
127+
async ({ limit, offset, asn, location, dateRange }) => {
128+
try {
129+
const client = getCloudflareClient(agent.props.accessToken)
130+
const r = await client.radar.trafficAnomalies.get({
131+
limit: limit ?? undefined,
132+
offset: offset ?? undefined,
133+
asn: asn ?? undefined,
134+
location: location ?? undefined,
135+
dateRange: dateRange ?? undefined,
136+
status: "VERIFIED"
137+
})
138+
139+
return {
140+
content: [
141+
{
142+
type: 'text',
143+
text: JSON.stringify({
144+
result: r.trafficAnomalies,
145+
}),
146+
},
147+
],
148+
}
149+
} catch (error) {
150+
return {
151+
content: [
152+
{
153+
type: 'text',
154+
text: `Error getting IP details: ${error instanceof Error && error.message}`,
155+
},
156+
],
157+
}
158+
}
159+
}
160+
)
116161
}

packages/mcp-common/src/types/radar.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,20 @@
44
import { z } from 'zod'
55

66
import type { ASNListParams } from 'cloudflare/resources/radar/entities/asns.mjs'
7+
import type { TrafficAnomalyGetParams } from 'cloudflare/resources/radar/traffic-anomalies.mjs'
78

89
export const AsnParam = z.number().positive()
910

1011
export const IpParam = z.string().ip()
1112

13+
export const DateRangeParam: z.ZodType<TrafficAnomalyGetParams['dateRange']> = z
14+
.string()
15+
.toLowerCase()
16+
.regex(
17+
/^((([1-9]|[1-9][0-9]|[1-2][0-9][0-9]|3[0-5][0-9]|36[0-4])[d](control)?)|(([1-9]|[1-4][0-9]|5[0-2])[w](control)?))$/,
18+
'Invalid Date Range',
19+
)
20+
1221
export const SingleLocationParam: z.ZodType<ASNListParams['location']> = z
1322
.string()
1423
.regex(/^[a-zA-Z]{2}$/, {

0 commit comments

Comments
 (0)