Skip to content

Commit 61fe122

Browse files
committed
modify search to fix claude issues
1 parent fb9e22e commit 61fe122

File tree

4 files changed

+55
-2
lines changed

4 files changed

+55
-2
lines changed

src/planet_mcp/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,6 @@ class Geometry(TypedDict):
66
type: str
77
coordinates: Any
88
content: str | None
9+
10+
11+
# class Filter

src/planet_mcp/servers/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
from . import sdk
22
from . import tiles
3+
from . import search
34

45
all = [
56
sdk,
67
tiles,
8+
search,
79
]

src/planet_mcp/servers/sdk.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55

66
from planet_mcp import models
77
from planet_mcp.clients import session
8+
from planet_mcp.servers import search
89
from . import descriptions
910
from fastmcp import FastMCP
1011
import planet
1112
from typing import Union
12-
13+
from datetime import datetime
1314

1415
# tools we don't want enabled at all.
1516
# they simply don't work well in an AI context.
@@ -19,6 +20,7 @@
1920
"data_get_search",
2021
"data_get_stats",
2122
"data_list_searches",
23+
"data_search",
2224
"data_update_search",
2325
"data_wait_asset",
2426
"destinations_patch_destination",
@@ -35,7 +37,6 @@
3537
TOOL_SIG_OVERRIDE = {
3638
"features_add_items",
3739
"data_get_item_coverage",
38-
"data_search",
3940
"mosaics_download_quad",
4041
"mosaics_download_quads",
4142
"mosaics_get_quad",

src/planet_mcp/servers/search.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from datetime import datetime
2+
3+
from fastmcp import FastMCP
4+
from planet import Planet
5+
from planet_mcp import models
6+
from planet_mcp.servers import descriptions
7+
8+
# technically not using the sdk to make the tool but we can add it to that
9+
10+
mcp = FastMCP("search")
11+
12+
13+
@mcp.tool(
14+
name="data_search",
15+
description=descriptions.overrides["data_search"],
16+
tags={"data"},
17+
enabled=True,
18+
)
19+
async def data_search(
20+
item_types: list[str],
21+
start_date: str,
22+
end_date: str,
23+
geometry: models.Geometry,
24+
):
25+
26+
planet = Planet()
27+
start_dt = datetime.fromisoformat(start_date.replace("Z", "+00:00"))
28+
end_dt = datetime.fromisoformat(end_date.replace("Z", "+00:00"))
29+
datefilter = {
30+
"type": "DateRangeFilter",
31+
"field_name": "acquired",
32+
"config": {"gte": start_dt.isoformat(), "lte": end_dt.isoformat()},
33+
}
34+
cloud_filter = {
35+
"type": "RangeFilter",
36+
"field_name": "cloud_cover",
37+
"config": {"lte": 0.2},
38+
}
39+
filter = {
40+
"type": "AndFilter",
41+
"config": [datefilter, cloud_filter],
42+
}
43+
return planet.data.search(
44+
item_types=item_types,
45+
geometry=dict(geometry),
46+
search_filter=filter,
47+
)

0 commit comments

Comments
 (0)