File tree Expand file tree Collapse file tree 4 files changed +55
-2
lines changed
Expand file tree Collapse file tree 4 files changed +55
-2
lines changed Original file line number Diff line number Diff line change @@ -6,3 +6,6 @@ class Geometry(TypedDict):
66 type : str
77 coordinates : Any
88 content : str | None
9+
10+
11+ # class Filter
Original file line number Diff line number Diff line change 11from . import sdk
22from . import tiles
3+ from . import search
34
45all = [
56 sdk ,
67 tiles ,
8+ search ,
79]
Original file line number Diff line number Diff line change 55
66from planet_mcp import models
77from planet_mcp .clients import session
8+ from planet_mcp .servers import search
89from . import descriptions
910from fastmcp import FastMCP
1011import planet
1112from 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.
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" ,
3537TOOL_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" ,
Original file line number Diff line number Diff line change 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+ )
You can’t perform that action at this time.
0 commit comments