@burdenoff/mcp-libs 2026.825.3 → 2026.902.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/modules/ecoimpacthub/operations.ts","../../../src/modules/ecoimpacthub/tools/shared.ts","../../../src/modules/ecoimpacthub/tools/sites.ts","../../../src/modules/ecoimpacthub/tools/sensors.ts","../../../src/modules/ecoimpacthub/tools/thresholds.ts","../../../src/modules/ecoimpacthub/tools/measurements.ts","../../../src/modules/ecoimpacthub/tools/species.ts","../../../src/modules/ecoimpacthub/tools/observations.ts","../../../src/modules/ecoimpacthub/tools/habitat.ts","../../../src/modules/ecoimpacthub/tools/carbon.ts","../../../src/modules/ecoimpacthub/tools/emissions.ts","../../../src/modules/ecoimpacthub/tools/targets.ts","../../../src/modules/ecoimpacthub/tools/reports.ts","../../../src/modules/ecoimpacthub/tools/health.ts","../../../src/modules/ecoimpacthub/resources.ts","../../../src/modules/ecoimpacthub/prompts.ts","../../../src/modules/ecoimpacthub/index.ts"],"names":["z"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Centralized GraphQL operations for the EcoImpactHub MCP module.\n *\n * EcoImpactHub is the environmental-impact + sustainability + biodiversity\n * monitoring platform (future-products ecosystem). Backend subgraph:\n * ~/products/wspace/ecoimpacthub/wspace-ecoimpacthub-svc/\n * (Hive service name `ecoimpacthub`).\n *\n * All operations run against the WORKSPACE gateway. Workspace scoping is\n * carried by the gateway headers (x-workspace-id / X-Workspace-Authorization)\n * issued by the auth module — EcoImpactHub inputs do NOT carry a workspaceId.\n *\n * Every Query/Mutation root field is prefixed `eco*` in the real schema and is\n * called here by its REAL name. List queries that return *Connection types use\n * `PaginationInput { cursor, limit, offset }`; the plain-array list queries take\n * direct filter args. Uses template-string interpolation (not gql tagged\n * fragments) to match the canonical kadaikodi module's operations file.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const SITE_FIELDS = `\n id name code description type status region country latitude longitude\n areaHectares workspaceId createdAt updatedAt\n`;\n\nexport const SENSOR_FIELDS = `\n id name siteId kind status unit hardwareId installedAt lastReadingAt\n workspaceId createdAt updatedAt\n`;\n\nexport const THRESHOLD_FIELDS = `\n id siteId parameter direction severity minValue maxValue limitValue unit\n isActive workspaceId createdAt updatedAt\n`;\n\nexport const MEASUREMENT_FIELDS = `\n id siteId sensorId parameter value unit recordedAt source isBreach notes\n workspaceId createdAt updatedAt\n`;\n\nexport const SPECIES_FIELDS = `\n id commonName scientificName taxonGroup conservationStatus isPriority\n description workspaceId createdAt updatedAt\n`;\n\nexport const OBSERVATION_FIELDS = `\n id speciesId siteId observerId observedAt method count latitude longitude\n notes evidence { id } workspaceId createdAt updatedAt\n`;\n\nexport const RESTORATION_ACTIVITY_FIELDS = `\n id projectId type summary details performedAt quantity unit workspaceId\n createdAt updatedAt\n`;\n\nexport const HABITAT_PROJECT_FIELDS = `\n id name description siteId managerId status targetHectares budgetAmount\n currency startDate endDate completedAt workspaceId createdAt updatedAt\n`;\n\nexport const EMISSION_FACTOR_FIELDS = `\n id name scope activityUnit factorKgco2e source validYear isActive\n workspaceId createdAt updatedAt\n`;\n\nexport const CARBON_ENTRY_FIELDS = `\n id category scope activityValue activityUnit co2eKg factorId siteId\n periodStart status notes workspaceId createdAt updatedAt\n`;\n\nexport const REDUCTION_TARGET_FIELDS = `\n id name metric description baselineValue baselineYear targetValue targetYear\n unit status workspaceId createdAt updatedAt\n`;\n\nexport const REPORT_LINE_ITEM_FIELDS = `\n id reportId label category value unit carbonEntryId workspaceId\n createdAt updatedAt\n`;\n\nexport const REPORT_FIELDS = `\n id title summary framework status periodStart periodEnd publishedAt\n file { id } workspaceId createdAt updatedAt\n lineItems { ${REPORT_LINE_ITEM_FIELDS} }\n`;\n\n// ---------------------------------------------------------------------------\n// Sites\n// ---------------------------------------------------------------------------\n\nexport const GET_SITE = `\n query EcoGetSite($id: ID!) {\n ecoSite(id: $id) {\n ${SITE_FIELDS}\n sensors { id name kind status unit }\n thresholds { id parameter direction severity isActive }\n }\n }\n`;\n\nexport const LIST_SITES = `\n query EcoListSites(\n $status: EcoSiteStatus\n $type: EcoSiteType\n $pagination: PaginationInput\n ) {\n ecoListSites(status: $status, type: $type, pagination: $pagination) {\n items { ${SITE_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }\n`;\n\nexport const CREATE_SITE = `\n mutation EcoCreateSite($input: EcoCreateSiteInput!) {\n ecoCreateSite(input: $input) {\n ${SITE_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_SITE = `\n mutation EcoUpdateSite($id: ID!, $input: EcoUpdateSiteInput!) {\n ecoUpdateSite(id: $id, input: $input) {\n ${SITE_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_SITE = `\n mutation EcoArchiveSite($id: ID!) {\n ecoArchiveSite(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Sensors\n// ---------------------------------------------------------------------------\n\nexport const LIST_SENSORS = `\n query EcoListSensors($siteId: ID, $kind: EcoSensorKind, $status: EcoSensorStatus) {\n ecoListSensors(siteId: $siteId, kind: $kind, status: $status) {\n ${SENSOR_FIELDS}\n site { id name }\n }\n }\n`;\n\nexport const CREATE_SENSOR = `\n mutation EcoCreateSensor($input: EcoCreateSensorInput!) {\n ecoCreateSensor(input: $input) {\n ${SENSOR_FIELDS}\n }\n }\n`;\n\nexport const SET_SENSOR_STATUS = `\n mutation EcoSetSensorStatus($id: ID!, $status: EcoSensorStatus!) {\n ecoSetSensorStatus(id: $id, status: $status) {\n ${SENSOR_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Thresholds\n// ---------------------------------------------------------------------------\n\nexport const LIST_THRESHOLDS = `\n query EcoListThresholds($siteId: ID) {\n ecoListThresholds(siteId: $siteId) {\n ${THRESHOLD_FIELDS}\n }\n }\n`;\n\nexport const CREATE_THRESHOLD = `\n mutation EcoCreateThreshold($input: EcoCreateThresholdInput!) {\n ecoCreateThreshold(input: $input) {\n ${THRESHOLD_FIELDS}\n }\n }\n`;\n\nexport const SET_THRESHOLD_ACTIVE = `\n mutation EcoSetThresholdActive($id: ID!, $isActive: Boolean!) {\n ecoSetThresholdActive(id: $id, isActive: $isActive) {\n ${THRESHOLD_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Measurements\n// ---------------------------------------------------------------------------\n\nexport const LIST_MEASUREMENTS = `\n query EcoListMeasurements(\n $siteId: ID\n $sensorId: ID\n $parameter: String\n $breachesOnly: Boolean\n $pagination: PaginationInput\n ) {\n ecoListMeasurements(\n siteId: $siteId\n sensorId: $sensorId\n parameter: $parameter\n breachesOnly: $breachesOnly\n pagination: $pagination\n ) {\n items { ${MEASUREMENT_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }\n`;\n\nexport const RECORD_MEASUREMENT = `\n mutation EcoRecordMeasurement($input: EcoRecordMeasurementInput!) {\n ecoRecordMeasurement(input: $input) {\n ${MEASUREMENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Species\n// ---------------------------------------------------------------------------\n\nexport const GET_SPECIES = `\n query EcoGetSpecies($id: ID!) {\n ecoSpecies(id: $id) {\n ${SPECIES_FIELDS}\n observations { id observedAt method count siteId }\n }\n }\n`;\n\nexport const LIST_SPECIES = `\n query EcoListSpecies(\n $taxonGroup: EcoTaxonGroup\n $conservationStatus: EcoConservationStatus\n $priorityOnly: Boolean\n $pagination: PaginationInput\n ) {\n ecoListSpecies(\n taxonGroup: $taxonGroup\n conservationStatus: $conservationStatus\n priorityOnly: $priorityOnly\n pagination: $pagination\n ) {\n items { ${SPECIES_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }\n`;\n\nexport const CREATE_SPECIES = `\n mutation EcoCreateSpecies($input: EcoCreateSpeciesInput!) {\n ecoCreateSpecies(input: $input) {\n ${SPECIES_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_SPECIES = `\n mutation EcoUpdateSpecies($id: ID!, $input: EcoUpdateSpeciesInput!) {\n ecoUpdateSpecies(id: $id, input: $input) {\n ${SPECIES_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_SPECIES = `\n mutation EcoArchiveSpecies($id: ID!) {\n ecoArchiveSpecies(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Observations\n// ---------------------------------------------------------------------------\n\nexport const LIST_OBSERVATIONS = `\n query EcoListObservations(\n $speciesId: ID\n $siteId: ID\n $pagination: PaginationInput\n ) {\n ecoListObservations(speciesId: $speciesId, siteId: $siteId, pagination: $pagination) {\n items {\n ${OBSERVATION_FIELDS}\n species { id commonName }\n }\n pageInfo { cursor hasMore }\n }\n }\n`;\n\nexport const RECORD_OBSERVATION = `\n mutation EcoRecordObservation($input: EcoRecordObservationInput!) {\n ecoRecordObservation(input: $input) {\n ${OBSERVATION_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Habitat projects + restoration activities\n// ---------------------------------------------------------------------------\n\nexport const GET_HABITAT_PROJECT = `\n query EcoGetHabitatProject($id: ID!) {\n ecoHabitatProject(id: $id) {\n ${HABITAT_PROJECT_FIELDS}\n activities { ${RESTORATION_ACTIVITY_FIELDS} }\n }\n }\n`;\n\nexport const LIST_HABITAT_PROJECTS = `\n query EcoListHabitatProjects($status: EcoHabitatProjectStatus) {\n ecoListHabitatProjects(status: $status) {\n ${HABITAT_PROJECT_FIELDS}\n }\n }\n`;\n\nexport const CREATE_HABITAT_PROJECT = `\n mutation EcoCreateHabitatProject($input: EcoCreateHabitatProjectInput!) {\n ecoCreateHabitatProject(input: $input) {\n ${HABITAT_PROJECT_FIELDS}\n }\n }\n`;\n\nexport const TRANSITION_HABITAT_PROJECT = `\n mutation EcoTransitionHabitatProject($id: ID!, $status: EcoHabitatProjectStatus!) {\n ecoTransitionHabitatProject(id: $id, status: $status) {\n ${HABITAT_PROJECT_FIELDS}\n activities { ${RESTORATION_ACTIVITY_FIELDS} }\n }\n }\n`;\n\nexport const LOG_RESTORATION_ACTIVITY = `\n mutation EcoLogRestorationActivity($input: EcoLogRestorationActivityInput!) {\n ecoLogRestorationActivity(input: $input) {\n ${RESTORATION_ACTIVITY_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Carbon ledger + emission factors\n// ---------------------------------------------------------------------------\n\nexport const LIST_CARBON_ENTRIES = `\n query EcoListCarbonEntries(\n $scope: EcoEmissionScope\n $siteId: ID\n $status: EcoCarbonEntryStatus\n $pagination: PaginationInput\n ) {\n ecoListCarbonEntries(\n scope: $scope\n siteId: $siteId\n status: $status\n pagination: $pagination\n ) {\n items {\n ${CARBON_ENTRY_FIELDS}\n factor { id name factorKgco2e }\n }\n pageInfo { cursor hasMore }\n }\n }\n`;\n\nexport const CARBON_TOTAL_KG = `\n query EcoCarbonTotalKg($scope: EcoEmissionScope, $siteId: ID) {\n ecoCarbonTotalKg(scope: $scope, siteId: $siteId)\n }\n`;\n\nexport const RECORD_CARBON_ENTRY = `\n mutation EcoRecordCarbonEntry($input: EcoRecordCarbonEntryInput!) {\n ecoRecordCarbonEntry(input: $input) {\n ${CARBON_ENTRY_FIELDS}\n factor { id name factorKgco2e }\n }\n }\n`;\n\nexport const VERIFY_CARBON_ENTRY = `\n mutation EcoVerifyCarbonEntry($id: ID!) {\n ecoVerifyCarbonEntry(id: $id) {\n ${CARBON_ENTRY_FIELDS}\n }\n }\n`;\n\nexport const LIST_EMISSION_FACTORS = `\n query EcoListEmissionFactors($scope: EcoEmissionScope, $activeOnly: Boolean) {\n ecoListEmissionFactors(scope: $scope, activeOnly: $activeOnly) {\n ${EMISSION_FACTOR_FIELDS}\n }\n }\n`;\n\nexport const CREATE_EMISSION_FACTOR = `\n mutation EcoCreateEmissionFactor($input: EcoCreateEmissionFactorInput!) {\n ecoCreateEmissionFactor(input: $input) {\n ${EMISSION_FACTOR_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Reduction targets\n// ---------------------------------------------------------------------------\n\nexport const LIST_REDUCTION_TARGETS = `\n query EcoListReductionTargets($status: EcoReductionTargetStatus) {\n ecoListReductionTargets(status: $status) {\n ${REDUCTION_TARGET_FIELDS}\n }\n }\n`;\n\nexport const CREATE_REDUCTION_TARGET = `\n mutation EcoCreateReductionTarget($input: EcoCreateReductionTargetInput!) {\n ecoCreateReductionTarget(input: $input) {\n ${REDUCTION_TARGET_FIELDS}\n }\n }\n`;\n\nexport const SET_REDUCTION_TARGET_STATUS = `\n mutation EcoSetReductionTargetStatus($id: ID!, $status: EcoReductionTargetStatus!) {\n ecoSetReductionTargetStatus(id: $id, status: $status) {\n ${REDUCTION_TARGET_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Reports\n// ---------------------------------------------------------------------------\n\nexport const GET_REPORT = `\n query EcoGetReport($id: ID!) {\n ecoReport(id: $id) {\n ${REPORT_FIELDS}\n }\n }\n`;\n\nexport const LIST_REPORTS = `\n query EcoListReports($status: EcoReportStatus, $pagination: PaginationInput) {\n ecoListReports(status: $status, pagination: $pagination) {\n items { ${REPORT_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }\n`;\n\nexport const CREATE_REPORT = `\n mutation EcoCreateReport($input: EcoCreateReportInput!) {\n ecoCreateReport(input: $input) {\n ${REPORT_FIELDS}\n }\n }\n`;\n\nexport const ADD_REPORT_LINE_ITEM = `\n mutation EcoAddReportLineItem($input: EcoAddReportLineItemInput!) {\n ecoAddReportLineItem(input: $input) {\n ${REPORT_LINE_ITEM_FIELDS}\n }\n }\n`;\n\nexport const PUBLISH_REPORT = `\n mutation EcoPublishReport($id: ID!, $fileId: ID) {\n ecoPublishReport(id: $id, fileId: $fileId) {\n ${REPORT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Health\n// ---------------------------------------------------------------------------\n\nexport const HEALTH = `\n query EcoHealth {\n ecoHealth\n }\n`;\n","/**\n * Shared zod schemas for the EcoImpactHub tool surface.\n *\n * Every backend enum is mirrored as a tight zod enum so Claude Desktop grounds\n * tool calls against the exact allowed values. All EcoImpactHub enums are\n * UPPERCASE in the real schema. Pagination is expressed as the backend's\n * `PaginationInput { cursor, limit, offset }` shape.\n */\n\nimport { z } from 'zod';\n\nexport const SiteStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'MONITORING_PAUSED'])\n .describe('Lifecycle/monitoring status of an environmental site');\n\nexport const SiteTypeEnum = z\n .enum([\n 'AIRSHED',\n 'COASTAL',\n 'FACILITY',\n 'FARM',\n 'FOREST',\n 'OTHER',\n 'PROTECTED_AREA',\n 'WATERSHED',\n 'WETLAND',\n ])\n .describe('Classification of an environmental site');\n\nexport const SensorKindEnum = z\n .enum([\n 'ACOUSTIC',\n 'AIR_QUALITY',\n 'CAMERA_TRAP',\n 'ENERGY_METER',\n 'FLOW',\n 'MANUAL',\n 'SOIL',\n 'WATER_QUALITY',\n 'WEATHER',\n ])\n .describe('Kind of monitoring sensor');\n\nexport const SensorStatusEnum = z\n .enum(['DEGRADED', 'MAINTENANCE', 'OFFLINE', 'ONLINE', 'RETIRED'])\n .describe('Operational status of a sensor');\n\nexport const ThresholdDirectionEnum = z\n .enum(['ABOVE', 'BELOW', 'OUTSIDE_RANGE'])\n .describe('Direction a measurement must drift to breach a threshold');\n\nexport const ThresholdSeverityEnum = z\n .enum(['CRITICAL', 'INFO', 'WARNING'])\n .describe('Severity classification of an alert threshold');\n\nexport const MeasurementSourceEnum = z\n .enum(['CALCULATED', 'IMPORT', 'MANUAL', 'SATELLITE', 'SENSOR'])\n .describe('Provenance of a measurement value');\n\nexport const ConservationStatusEnum = z\n .enum([\n 'CRITICALLY_ENDANGERED',\n 'DATA_DEFICIENT',\n 'ENDANGERED',\n 'EXTINCT_IN_WILD',\n 'LEAST_CONCERN',\n 'NEAR_THREATENED',\n 'NOT_EVALUATED',\n 'VULNERABLE',\n ])\n .describe('IUCN-style conservation status of a species');\n\nexport const TaxonGroupEnum = z\n .enum(['AMPHIBIAN', 'BIRD', 'FISH', 'FUNGI', 'INSECT', 'MAMMAL', 'OTHER', 'PLANT', 'REPTILE'])\n .describe('Broad taxonomic group of a species');\n\nexport const ObservationMethodEnum = z\n .enum([\n 'ACOUSTIC',\n 'CAMERA_TRAP',\n 'COMMUNITY_REPORT',\n 'DIRECT_SIGHTING',\n 'EDNA',\n 'TELEMETRY',\n 'TRACKS_SIGNS',\n ])\n .describe('Method by which a species observation was recorded');\n\nexport const HabitatProjectStatusEnum = z\n .enum(['CANCELLED', 'COMPLETED', 'IN_PROGRESS', 'MONITORING', 'ON_HOLD', 'PLANNED'])\n .describe('Lifecycle status of a habitat restoration project');\n\nexport const RestorationActivityTypeEnum = z\n .enum([\n 'COMMUNITY_ENGAGEMENT',\n 'INVASIVE_REMOVAL',\n 'PLANTING',\n 'REWILDING',\n 'SOIL_REMEDIATION',\n 'SURVEY',\n 'WATER_MANAGEMENT',\n ])\n .describe('Type of restoration activity logged against a habitat project');\n\nexport const EmissionScopeEnum = z\n .enum(['SCOPE_1', 'SCOPE_2', 'SCOPE_3'])\n .describe('GHG Protocol emission scope');\n\nexport const CarbonEntryStatusEnum = z\n .enum(['ADJUSTED', 'DRAFT', 'RECORDED', 'VERIFIED'])\n .describe('Lifecycle status of a carbon-ledger entry');\n\nexport const ReductionTargetStatusEnum = z\n .enum(['ACHIEVED', 'ACTIVE', 'MISSED', 'PROPOSED', 'RETIRED'])\n .describe('Status of an emissions-reduction target');\n\nexport const ReportFrameworkEnum = z\n .enum(['CDP', 'CUSTOM', 'GHG_PROTOCOL', 'GRI', 'SASB', 'TCFD'])\n .describe('Sustainability-reporting framework');\n\nexport const ReportStatusEnum = z\n .enum(['ARCHIVED', 'DRAFT', 'IN_REVIEW', 'PUBLISHED'])\n .describe('Lifecycle status of a sustainability report');\n\n/**\n * Builds a backend `PaginationInput { cursor?, limit?, offset? }` from the\n * optional MCP tool args, or `undefined` when no pagination args were given.\n */\nexport function buildPagination(args: {\n limit?: number;\n offset?: number;\n cursor?: string;\n}): Record<string, unknown> | undefined {\n const pagination: Record<string, unknown> = {};\n if (args.limit !== undefined) pagination.limit = args.limit;\n if (args.offset !== undefined) pagination.offset = args.offset;\n if (args.cursor !== undefined) pagination.cursor = args.cursor;\n return Object.keys(pagination).length > 0 ? pagination : undefined;\n}\n\n/** Reusable pagination tool-input fields (mirrors PaginationInput). */\nexport const paginationInputShape = {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n};\n","/**\n * EcoImpactHub site tools — monitored environmental sites CRUD.\n *\n * Surface (5): sites_{get,list,create,update,archive}.\n * `sites_get` (ecoSite) returns the site with its sensors + thresholds;\n * `sites_list` (ecoListSites) is connection-paginated.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { SiteStatusEnum, SiteTypeEnum, buildPagination, paginationInputShape } from './shared.js';\n\nexport function registerSiteTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sites_get')),\n {\n title: 'Get Site',\n description:\n 'Fetch a single monitored environmental site by ID, including its sensors and alert thresholds.',\n inputSchema: { id: z.string().describe('Site ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoSite: Record<string, unknown> | null;\n }>(ops.GET_SITE, { id });\n if (!data.ecoSite) return errorResult(`Site ${id} not found`);\n return jsonResult(data.ecoSite);\n } catch (error) {\n ctx.logger.error('ecoimpacthub sites_get failed', { error: String(error) });\n return errorResult(\n `Failed to get site: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sites_list')),\n {\n title: 'List Sites',\n description:\n 'List monitored sites in the bound workspace with optional status/type filters and cursor pagination.',\n inputSchema: {\n status: SiteStatusEnum.optional().describe('Filter by monitoring status'),\n type: SiteTypeEnum.optional().describe('Filter by site type'),\n ...paginationInputShape,\n },\n },\n async ({ status, type, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListSites: {\n items: Array<Record<string, unknown>>;\n pageInfo: Record<string, unknown>;\n };\n }>(ops.LIST_SITES, {\n status,\n type,\n pagination: buildPagination({ limit, offset, cursor }),\n });\n return jsonResult(data.ecoListSites);\n } catch (error) {\n ctx.logger.error('ecoimpacthub sites_list failed', { error: String(error) });\n return errorResult(\n `Failed to list sites: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sites_create')),\n {\n title: 'Create Site',\n description:\n 'Register a new monitored environmental site (facility, forest, watershed, etc.).',\n inputSchema: {\n name: z.string().min(1).describe('Site display name'),\n type: SiteTypeEnum.optional().describe('Site type (default FACILITY)'),\n status: SiteStatusEnum.optional().describe('Initial status (default ACTIVE)'),\n code: z.string().optional().describe('Short site code'),\n description: z.string().optional().describe('Site description'),\n region: z.string().optional().describe('Region / sub-national area'),\n country: z.string().optional().describe('Country'),\n latitude: z.number().optional().describe('Latitude (decimal degrees)'),\n longitude: z.number().optional().describe('Longitude (decimal degrees)'),\n areaHectares: z.number().optional().describe('Site area in hectares'),\n },\n },\n async ({\n name,\n type,\n status,\n code,\n description,\n region,\n country,\n latitude,\n longitude,\n areaHectares,\n }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (type !== undefined) input.type = type;\n if (status !== undefined) input.status = status;\n if (code !== undefined) input.code = code;\n if (description !== undefined) input.description = description;\n if (region !== undefined) input.region = region;\n if (country !== undefined) input.country = country;\n if (latitude !== undefined) input.latitude = latitude;\n if (longitude !== undefined) input.longitude = longitude;\n if (areaHectares !== undefined) input.areaHectares = areaHectares;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateSite: Record<string, unknown>;\n }>(ops.CREATE_SITE, { input });\n return jsonResult(data.ecoCreateSite);\n } catch (error) {\n ctx.logger.error('ecoimpacthub sites_create failed', { error: String(error) });\n return errorResult(\n `Failed to create site: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sites_update')),\n {\n title: 'Update Site',\n description: 'Update a monitored site. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Site ID'),\n name: z.string().optional().describe('Updated name'),\n type: SiteTypeEnum.optional().describe('Updated site type'),\n status: SiteStatusEnum.optional().describe('Updated monitoring status'),\n code: z.string().optional().describe('Updated site code'),\n description: z.string().optional().describe('Updated description'),\n region: z.string().optional().describe('Updated region'),\n country: z.string().optional().describe('Updated country'),\n latitude: z.number().optional().describe('Updated latitude'),\n longitude: z.number().optional().describe('Updated longitude'),\n areaHectares: z.number().optional().describe('Updated area in hectares'),\n },\n },\n async ({\n id,\n name,\n type,\n status,\n code,\n description,\n region,\n country,\n latitude,\n longitude,\n areaHectares,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (type !== undefined) input.type = type;\n if (status !== undefined) input.status = status;\n if (code !== undefined) input.code = code;\n if (description !== undefined) input.description = description;\n if (region !== undefined) input.region = region;\n if (country !== undefined) input.country = country;\n if (latitude !== undefined) input.latitude = latitude;\n if (longitude !== undefined) input.longitude = longitude;\n if (areaHectares !== undefined) input.areaHectares = areaHectares;\n\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable site field');\n }\n\n const data = await ctx.gql.workspace.request<{\n ecoUpdateSite: Record<string, unknown>;\n }>(ops.UPDATE_SITE, { id, input });\n return jsonResult(data.ecoUpdateSite);\n } catch (error) {\n ctx.logger.error('ecoimpacthub sites_update failed', { error: String(error) });\n return errorResult(\n `Failed to update site: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sites_archive')),\n {\n title: 'Archive Site',\n description: 'Archive a monitored site (soft delete). Returns true on success.',\n inputSchema: { id: z.string().describe('Site ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ ecoArchiveSite: boolean }>(\n ops.ARCHIVE_SITE,\n {\n id,\n },\n );\n return jsonResult({ ok: data.ecoArchiveSite, id });\n } catch (error) {\n ctx.logger.error('ecoimpacthub sites_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive site: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub sensor tools — monitoring hardware attached to sites.\n *\n * Surface (3): sensors_{list,create,set_status}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { SensorKindEnum, SensorStatusEnum } from './shared.js';\n\nexport function registerSensorTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sensors_list')),\n {\n title: 'List Sensors',\n description:\n 'List monitoring sensors, optionally filtered by site, kind, and/or operational status.',\n inputSchema: {\n siteId: z.string().optional().describe('Filter by site ID'),\n kind: SensorKindEnum.optional().describe('Filter by sensor kind'),\n status: SensorStatusEnum.optional().describe('Filter by operational status'),\n },\n },\n async ({ siteId, kind, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListSensors: Array<Record<string, unknown>>;\n }>(ops.LIST_SENSORS, { siteId, kind, status });\n return jsonResult(data.ecoListSensors);\n } catch (error) {\n ctx.logger.error('ecoimpacthub sensors_list failed', { error: String(error) });\n return errorResult(\n `Failed to list sensors: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sensors_create')),\n {\n title: 'Create Sensor',\n description:\n 'Provision a new sensor on a site. `kind` defaults to MANUAL and `status` to ONLINE.',\n inputSchema: {\n siteId: z.string().min(1).describe('Owning site ID'),\n name: z.string().min(1).describe('Sensor display name'),\n kind: SensorKindEnum.optional().describe('Sensor kind (default MANUAL)'),\n status: SensorStatusEnum.optional().describe('Initial status (default ONLINE)'),\n unit: z.string().optional().describe('Default measurement unit'),\n hardwareId: z.string().optional().describe('Physical hardware identifier'),\n installedAt: z.string().optional().describe('Installation timestamp (ISO-8601 DateTime)'),\n },\n },\n async ({ siteId, name, kind, status, unit, hardwareId, installedAt }) => {\n try {\n const input: Record<string, unknown> = { siteId, name };\n if (kind !== undefined) input.kind = kind;\n if (status !== undefined) input.status = status;\n if (unit !== undefined) input.unit = unit;\n if (hardwareId !== undefined) input.hardwareId = hardwareId;\n if (installedAt !== undefined) input.installedAt = installedAt;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateSensor: Record<string, unknown>;\n }>(ops.CREATE_SENSOR, { input });\n return jsonResult(data.ecoCreateSensor);\n } catch (error) {\n ctx.logger.error('ecoimpacthub sensors_create failed', { error: String(error) });\n return errorResult(\n `Failed to create sensor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sensors_set_status')),\n {\n title: 'Set Sensor Status',\n description:\n \"Update a sensor's operational status (e.g. flag it OFFLINE / MAINTENANCE / DEGRADED).\",\n inputSchema: {\n id: z.string().describe('Sensor ID'),\n status: SensorStatusEnum.describe('New operational status'),\n },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoSetSensorStatus: Record<string, unknown>;\n }>(ops.SET_SENSOR_STATUS, { id, status });\n return jsonResult(data.ecoSetSensorStatus);\n } catch (error) {\n ctx.logger.error('ecoimpacthub sensors_set_status failed', { error: String(error) });\n return errorResult(\n `Failed to set sensor status: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub alert-threshold tools — per-site/parameter breach rules.\n *\n * Surface (3): thresholds_{list,create,set_active}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { ThresholdDirectionEnum, ThresholdSeverityEnum } from './shared.js';\n\nexport function registerThresholdTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'thresholds_list')),\n {\n title: 'List Alert Thresholds',\n description: 'List alert thresholds, optionally filtered by site.',\n inputSchema: {\n siteId: z.string().optional().describe('Filter by site ID'),\n },\n },\n async ({ siteId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListThresholds: Array<Record<string, unknown>>;\n }>(ops.LIST_THRESHOLDS, { siteId });\n return jsonResult(data.ecoListThresholds);\n } catch (error) {\n ctx.logger.error('ecoimpacthub thresholds_list failed', { error: String(error) });\n return errorResult(\n `Failed to list thresholds: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'thresholds_create')),\n {\n title: 'Create Alert Threshold',\n description:\n 'Create an alert threshold for a site + parameter. `direction` defaults to ABOVE and `severity` to WARNING. Provide min/max for OUTSIDE_RANGE or limitValue for ABOVE/BELOW.',\n inputSchema: {\n siteId: z.string().min(1).describe('Owning site ID'),\n parameter: z\n .string()\n .min(1)\n .describe('Monitored parameter (e.g. \"pm2_5\", \"ph\", \"turbidity\")'),\n unit: z.string().min(1).describe('Unit of the threshold value'),\n direction: ThresholdDirectionEnum.optional().describe('Breach direction (default ABOVE)'),\n severity: ThresholdSeverityEnum.optional().describe('Alert severity (default WARNING)'),\n limitValue: z.number().optional().describe('Single limit value (ABOVE/BELOW)'),\n minValue: z.number().optional().describe('Lower bound (OUTSIDE_RANGE)'),\n maxValue: z.number().optional().describe('Upper bound (OUTSIDE_RANGE)'),\n },\n },\n async ({ siteId, parameter, unit, direction, severity, limitValue, minValue, maxValue }) => {\n try {\n const input: Record<string, unknown> = { siteId, parameter, unit };\n if (direction !== undefined) input.direction = direction;\n if (severity !== undefined) input.severity = severity;\n if (limitValue !== undefined) input.limitValue = limitValue;\n if (minValue !== undefined) input.minValue = minValue;\n if (maxValue !== undefined) input.maxValue = maxValue;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateThreshold: Record<string, unknown>;\n }>(ops.CREATE_THRESHOLD, { input });\n return jsonResult(data.ecoCreateThreshold);\n } catch (error) {\n ctx.logger.error('ecoimpacthub thresholds_create failed', { error: String(error) });\n return errorResult(\n `Failed to create threshold: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'thresholds_set_active')),\n {\n title: 'Set Threshold Active',\n description: 'Enable or disable an alert threshold.',\n inputSchema: {\n id: z.string().describe('Threshold ID'),\n isActive: z.boolean().describe('Whether the threshold should be active'),\n },\n },\n async ({ id, isActive }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoSetThresholdActive: Record<string, unknown>;\n }>(ops.SET_THRESHOLD_ACTIVE, { id, isActive });\n return jsonResult(data.ecoSetThresholdActive);\n } catch (error) {\n ctx.logger.error('ecoimpacthub thresholds_set_active failed', { error: String(error) });\n return errorResult(\n `Failed to set threshold active state: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub measurement tools — telemetry readings + breach evaluation.\n *\n * Surface (2): measurements_list, measurements_record.\n * `measurements_record` evaluates the value against active thresholds for the\n * site + parameter and flags a breach when it drifts out of range.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { MeasurementSourceEnum, buildPagination, paginationInputShape } from './shared.js';\n\nexport function registerMeasurementTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'measurements_list')),\n {\n title: 'List Measurements',\n description:\n 'List telemetry measurements with optional site/sensor/parameter filters, a breaches-only flag, and cursor pagination.',\n inputSchema: {\n siteId: z.string().optional().describe('Filter by site ID'),\n sensorId: z.string().optional().describe('Filter by sensor ID'),\n parameter: z.string().optional().describe('Filter by measured parameter'),\n breachesOnly: z\n .boolean()\n .optional()\n .describe('Only return measurements flagged as breaches'),\n ...paginationInputShape,\n },\n },\n async ({ siteId, sensorId, parameter, breachesOnly, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListMeasurements: {\n items: Array<Record<string, unknown>>;\n pageInfo: Record<string, unknown>;\n };\n }>(ops.LIST_MEASUREMENTS, {\n siteId,\n sensorId,\n parameter,\n breachesOnly,\n pagination: buildPagination({ limit, offset, cursor }),\n });\n return jsonResult(data.ecoListMeasurements);\n } catch (error) {\n ctx.logger.error('ecoimpacthub measurements_list failed', { error: String(error) });\n return errorResult(\n `Failed to list measurements: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'measurements_record')),\n {\n title: 'Record Measurement',\n description:\n 'Record a measurement for a site + parameter; the value is evaluated against active thresholds and flagged as a breach when out of range. `source` defaults to SENSOR.',\n inputSchema: {\n siteId: z.string().min(1).describe('Site the measurement belongs to'),\n parameter: z.string().min(1).describe('Measured parameter (e.g. \"pm2_5\", \"ph\")'),\n value: z.number().describe('Measured value'),\n unit: z.string().min(1).describe('Unit of the value'),\n recordedAt: z.string().describe('When the measurement was taken (ISO-8601 DateTime)'),\n source: MeasurementSourceEnum.optional().describe('Provenance (default SENSOR)'),\n sensorId: z.string().optional().describe('Source sensor ID (if from a sensor)'),\n notes: z.string().optional().describe('Free-text notes'),\n },\n },\n async ({ siteId, parameter, value, unit, recordedAt, source, sensorId, notes }) => {\n try {\n const input: Record<string, unknown> = { siteId, parameter, value, unit, recordedAt };\n if (source !== undefined) input.source = source;\n if (sensorId !== undefined) input.sensorId = sensorId;\n if (notes !== undefined) input.notes = notes;\n\n const data = await ctx.gql.workspace.request<{\n ecoRecordMeasurement: Record<string, unknown>;\n }>(ops.RECORD_MEASUREMENT, { input });\n return jsonResult(data.ecoRecordMeasurement);\n } catch (error) {\n ctx.logger.error('ecoimpacthub measurements_record failed', { error: String(error) });\n return errorResult(\n `Failed to record measurement: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub species tools — biodiversity catalog CRUD.\n *\n * Surface (5): species_{get,list,create,update,archive}.\n * `species_get` (ecoSpecies) returns the species with its recent observations;\n * `species_list` (ecoListSpecies) is connection-paginated.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n TaxonGroupEnum,\n ConservationStatusEnum,\n buildPagination,\n paginationInputShape,\n} from './shared.js';\n\nexport function registerSpeciesTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'species_get')),\n {\n title: 'Get Species',\n description: 'Fetch a single catalogued species by ID, including its observations.',\n inputSchema: { id: z.string().describe('Species ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoSpecies: Record<string, unknown> | null;\n }>(ops.GET_SPECIES, { id });\n if (!data.ecoSpecies) return errorResult(`Species ${id} not found`);\n return jsonResult(data.ecoSpecies);\n } catch (error) {\n ctx.logger.error('ecoimpacthub species_get failed', { error: String(error) });\n return errorResult(\n `Failed to get species: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'species_list')),\n {\n title: 'List Species',\n description:\n 'List catalogued species with optional taxon-group/conservation-status/priority filters and cursor pagination.',\n inputSchema: {\n taxonGroup: TaxonGroupEnum.optional().describe('Filter by taxonomic group'),\n conservationStatus: ConservationStatusEnum.optional().describe(\n 'Filter by conservation status',\n ),\n priorityOnly: z.boolean().optional().describe('Only priority species'),\n ...paginationInputShape,\n },\n },\n async ({ taxonGroup, conservationStatus, priorityOnly, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListSpecies: {\n items: Array<Record<string, unknown>>;\n pageInfo: Record<string, unknown>;\n };\n }>(ops.LIST_SPECIES, {\n taxonGroup,\n conservationStatus,\n priorityOnly,\n pagination: buildPagination({ limit, offset, cursor }),\n });\n return jsonResult(data.ecoListSpecies);\n } catch (error) {\n ctx.logger.error('ecoimpacthub species_list failed', { error: String(error) });\n return errorResult(\n `Failed to list species: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'species_create')),\n {\n title: 'Create Species',\n description:\n 'Add a species to the biodiversity catalog. `taxonGroup` defaults to OTHER and `conservationStatus` to NOT_EVALUATED.',\n inputSchema: {\n commonName: z.string().min(1).describe('Common (vernacular) name'),\n scientificName: z.string().optional().describe('Binomial scientific name'),\n taxonGroup: TaxonGroupEnum.optional().describe('Taxonomic group (default OTHER)'),\n conservationStatus: ConservationStatusEnum.optional().describe(\n 'Conservation status (default NOT_EVALUATED)',\n ),\n isPriority: z.boolean().optional().describe('Flag as a priority species (default false)'),\n description: z.string().optional().describe('Species description / notes'),\n },\n },\n async ({\n commonName,\n scientificName,\n taxonGroup,\n conservationStatus,\n isPriority,\n description,\n }) => {\n try {\n const input: Record<string, unknown> = { commonName };\n if (scientificName !== undefined) input.scientificName = scientificName;\n if (taxonGroup !== undefined) input.taxonGroup = taxonGroup;\n if (conservationStatus !== undefined) input.conservationStatus = conservationStatus;\n if (isPriority !== undefined) input.isPriority = isPriority;\n if (description !== undefined) input.description = description;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateSpecies: Record<string, unknown>;\n }>(ops.CREATE_SPECIES, { input });\n return jsonResult(data.ecoCreateSpecies);\n } catch (error) {\n ctx.logger.error('ecoimpacthub species_create failed', { error: String(error) });\n return errorResult(\n `Failed to create species: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'species_update')),\n {\n title: 'Update Species',\n description: 'Update a catalogued species. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Species ID'),\n commonName: z.string().optional().describe('Updated common name'),\n scientificName: z.string().optional().describe('Updated scientific name'),\n taxonGroup: TaxonGroupEnum.optional().describe('Updated taxonomic group'),\n conservationStatus: ConservationStatusEnum.optional().describe(\n 'Updated conservation status',\n ),\n isPriority: z.boolean().optional().describe('Updated priority flag'),\n description: z.string().optional().describe('Updated description'),\n },\n },\n async ({\n id,\n commonName,\n scientificName,\n taxonGroup,\n conservationStatus,\n isPriority,\n description,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (commonName !== undefined) input.commonName = commonName;\n if (scientificName !== undefined) input.scientificName = scientificName;\n if (taxonGroup !== undefined) input.taxonGroup = taxonGroup;\n if (conservationStatus !== undefined) input.conservationStatus = conservationStatus;\n if (isPriority !== undefined) input.isPriority = isPriority;\n if (description !== undefined) input.description = description;\n\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable species field');\n }\n\n const data = await ctx.gql.workspace.request<{\n ecoUpdateSpecies: Record<string, unknown>;\n }>(ops.UPDATE_SPECIES, { id, input });\n return jsonResult(data.ecoUpdateSpecies);\n } catch (error) {\n ctx.logger.error('ecoimpacthub species_update failed', { error: String(error) });\n return errorResult(\n `Failed to update species: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'species_archive')),\n {\n title: 'Archive Species',\n description: 'Archive a species (soft delete). Returns true on success.',\n inputSchema: { id: z.string().describe('Species ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ ecoArchiveSpecies: boolean }>(\n ops.ARCHIVE_SPECIES,\n { id },\n );\n return jsonResult({ ok: data.ecoArchiveSpecies, id });\n } catch (error) {\n ctx.logger.error('ecoimpacthub species_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive species: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub observation tools — species sightings + field evidence.\n *\n * Surface (2): observations_list, observations_record.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { ObservationMethodEnum, buildPagination, paginationInputShape } from './shared.js';\n\nexport function registerObservationTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'observations_list')),\n {\n title: 'List Observations',\n description:\n 'List species observations with optional species/site filters and cursor pagination.',\n inputSchema: {\n speciesId: z.string().optional().describe('Filter by species ID'),\n siteId: z.string().optional().describe('Filter by site ID'),\n ...paginationInputShape,\n },\n },\n async ({ speciesId, siteId, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListObservations: {\n items: Array<Record<string, unknown>>;\n pageInfo: Record<string, unknown>;\n };\n }>(ops.LIST_OBSERVATIONS, {\n speciesId,\n siteId,\n pagination: buildPagination({ limit, offset, cursor }),\n });\n return jsonResult(data.ecoListObservations);\n } catch (error) {\n ctx.logger.error('ecoimpacthub observations_list failed', { error: String(error) });\n return errorResult(\n `Failed to list observations: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'observations_record')),\n {\n title: 'Record Observation',\n description:\n 'Record a species observation. `count` defaults to 1 and `method` to DIRECT_SIGHTING. Attach a wspace-files File via `evidenceFileId` for photo/audio evidence.',\n inputSchema: {\n speciesId: z.string().min(1).describe('Observed species ID'),\n observedAt: z.string().describe('When the observation was made (ISO-8601 DateTime)'),\n siteId: z.string().optional().describe('Site where it was observed'),\n method: ObservationMethodEnum.optional().describe(\n 'Observation method (default DIRECT_SIGHTING)',\n ),\n count: z.number().int().optional().describe('Number of individuals (default 1)'),\n latitude: z.number().optional().describe('Latitude (decimal degrees)'),\n longitude: z.number().optional().describe('Longitude (decimal degrees)'),\n evidenceFileId: z\n .string()\n .optional()\n .describe('wspace-files File ID for photo/audio evidence'),\n notes: z.string().optional().describe('Free-text notes'),\n },\n },\n async ({\n speciesId,\n observedAt,\n siteId,\n method,\n count,\n latitude,\n longitude,\n evidenceFileId,\n notes,\n }) => {\n try {\n const input: Record<string, unknown> = { speciesId, observedAt };\n if (siteId !== undefined) input.siteId = siteId;\n if (method !== undefined) input.method = method;\n if (count !== undefined) input.count = count;\n if (latitude !== undefined) input.latitude = latitude;\n if (longitude !== undefined) input.longitude = longitude;\n if (evidenceFileId !== undefined) input.evidenceFileId = evidenceFileId;\n if (notes !== undefined) input.notes = notes;\n\n const data = await ctx.gql.workspace.request<{\n ecoRecordObservation: Record<string, unknown>;\n }>(ops.RECORD_OBSERVATION, { input });\n return jsonResult(data.ecoRecordObservation);\n } catch (error) {\n ctx.logger.error('ecoimpacthub observations_record failed', { error: String(error) });\n return errorResult(\n `Failed to record observation: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub habitat-restoration tools — projects + logged activities.\n *\n * Surface (5): habitat_projects_{get,list,create,transition},\n * habitat_projects_log_activity.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { HabitatProjectStatusEnum, RestorationActivityTypeEnum } from './shared.js';\n\nexport function registerHabitatTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'habitat_projects_get')),\n {\n title: 'Get Habitat Project',\n description:\n 'Fetch a single habitat restoration project by ID, including its logged restoration activities.',\n inputSchema: { id: z.string().describe('Habitat project ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoHabitatProject: Record<string, unknown> | null;\n }>(ops.GET_HABITAT_PROJECT, { id });\n if (!data.ecoHabitatProject) return errorResult(`Habitat project ${id} not found`);\n return jsonResult(data.ecoHabitatProject);\n } catch (error) {\n ctx.logger.error('ecoimpacthub habitat_projects_get failed', { error: String(error) });\n return errorResult(\n `Failed to get habitat project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'habitat_projects_list')),\n {\n title: 'List Habitat Projects',\n description: 'List habitat restoration projects, optionally filtered by status.',\n inputSchema: {\n status: HabitatProjectStatusEnum.optional().describe('Filter by project status'),\n },\n },\n async ({ status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListHabitatProjects: Array<Record<string, unknown>>;\n }>(ops.LIST_HABITAT_PROJECTS, { status });\n return jsonResult(data.ecoListHabitatProjects);\n } catch (error) {\n ctx.logger.error('ecoimpacthub habitat_projects_list failed', { error: String(error) });\n return errorResult(\n `Failed to list habitat projects: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'habitat_projects_create')),\n {\n title: 'Create Habitat Project',\n description: 'Create a habitat restoration project (target area, budget, timeline, manager).',\n inputSchema: {\n name: z.string().min(1).describe('Project name'),\n description: z.string().optional().describe('Project description'),\n siteId: z.string().optional().describe('Associated site ID'),\n managerId: z.string().optional().describe('Project manager user ID'),\n targetHectares: z.number().optional().describe('Target restoration area in hectares'),\n budgetAmount: z.number().optional().describe('Budget amount'),\n currency: z.string().optional().describe('Budget currency code'),\n startDate: z.string().optional().describe('Planned start (ISO-8601 DateTime)'),\n endDate: z.string().optional().describe('Planned end (ISO-8601 DateTime)'),\n },\n },\n async ({\n name,\n description,\n siteId,\n managerId,\n targetHectares,\n budgetAmount,\n currency,\n startDate,\n endDate,\n }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (description !== undefined) input.description = description;\n if (siteId !== undefined) input.siteId = siteId;\n if (managerId !== undefined) input.managerId = managerId;\n if (targetHectares !== undefined) input.targetHectares = targetHectares;\n if (budgetAmount !== undefined) input.budgetAmount = budgetAmount;\n if (currency !== undefined) input.currency = currency;\n if (startDate !== undefined) input.startDate = startDate;\n if (endDate !== undefined) input.endDate = endDate;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateHabitatProject: Record<string, unknown>;\n }>(ops.CREATE_HABITAT_PROJECT, { input });\n return jsonResult(data.ecoCreateHabitatProject);\n } catch (error) {\n ctx.logger.error('ecoimpacthub habitat_projects_create failed', { error: String(error) });\n return errorResult(\n `Failed to create habitat project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'habitat_projects_transition')),\n {\n title: 'Transition Habitat Project',\n description:\n 'Advance a habitat project through its lifecycle (validated transitions, e.g. PLANNED → IN_PROGRESS → MONITORING → COMPLETED, or ON_HOLD / CANCELLED).',\n inputSchema: {\n id: z.string().describe('Habitat project ID'),\n status: HabitatProjectStatusEnum.describe('Target lifecycle status'),\n },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoTransitionHabitatProject: Record<string, unknown>;\n }>(ops.TRANSITION_HABITAT_PROJECT, { id, status });\n return jsonResult(data.ecoTransitionHabitatProject);\n } catch (error) {\n ctx.logger.error('ecoimpacthub habitat_projects_transition failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to transition habitat project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'habitat_projects_log_activity')),\n {\n title: 'Log Restoration Activity',\n description:\n 'Log a restoration activity against a habitat project (planting, invasive removal, survey, etc.). `type` defaults to PLANTING.',\n inputSchema: {\n projectId: z.string().min(1).describe('Owning habitat project ID'),\n summary: z.string().min(1).describe('Short activity summary'),\n performedAt: z.string().describe('When the activity was performed (ISO-8601 DateTime)'),\n type: RestorationActivityTypeEnum.optional().describe('Activity type (default PLANTING)'),\n quantity: z\n .number()\n .optional()\n .describe('Quantity (e.g. seedlings planted, hectares cleared)'),\n unit: z.string().optional().describe('Unit of the quantity'),\n details: z.string().optional().describe('Detailed notes'),\n },\n },\n async ({ projectId, summary, performedAt, type, quantity, unit, details }) => {\n try {\n const input: Record<string, unknown> = { projectId, summary, performedAt };\n if (type !== undefined) input.type = type;\n if (quantity !== undefined) input.quantity = quantity;\n if (unit !== undefined) input.unit = unit;\n if (details !== undefined) input.details = details;\n\n const data = await ctx.gql.workspace.request<{\n ecoLogRestorationActivity: Record<string, unknown>;\n }>(ops.LOG_RESTORATION_ACTIVITY, { input });\n return jsonResult(data.ecoLogRestorationActivity);\n } catch (error) {\n ctx.logger.error('ecoimpacthub habitat_projects_log_activity failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to log restoration activity: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub carbon-ledger tools — emission entries + workspace totals.\n *\n * Surface (4): carbon_{list_entries,record_entry,verify_entry,total_kg}.\n * `carbon_entries_record` computes CO2e from the activity value and the\n * referenced emission factor (when one is provided).\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n EmissionScopeEnum,\n CarbonEntryStatusEnum,\n buildPagination,\n paginationInputShape,\n} from './shared.js';\n\nexport function registerCarbonTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'carbon_list_entries')),\n {\n title: 'List Carbon Entries',\n description:\n 'List carbon-ledger entries with optional scope/site/status filters and cursor pagination.',\n inputSchema: {\n scope: EmissionScopeEnum.optional().describe('Filter by emission scope'),\n siteId: z.string().optional().describe('Filter by site ID'),\n status: CarbonEntryStatusEnum.optional().describe('Filter by entry status'),\n ...paginationInputShape,\n },\n },\n async ({ scope, siteId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListCarbonEntries: {\n items: Array<Record<string, unknown>>;\n pageInfo: Record<string, unknown>;\n };\n }>(ops.LIST_CARBON_ENTRIES, {\n scope,\n siteId,\n status,\n pagination: buildPagination({ limit, offset, cursor }),\n });\n return jsonResult(data.ecoListCarbonEntries);\n } catch (error) {\n ctx.logger.error('ecoimpacthub carbon_list_entries failed', { error: String(error) });\n return errorResult(\n `Failed to list carbon entries: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'carbon_total_kg')),\n {\n title: 'Carbon Total (kg CO2e)',\n description:\n 'Total CO2e (kg) recorded in the workspace, optionally narrowed by emission scope and/or site.',\n inputSchema: {\n scope: EmissionScopeEnum.optional().describe('Narrow the total to a single emission scope'),\n siteId: z.string().optional().describe('Narrow the total to a single site'),\n },\n },\n async ({ scope, siteId }) => {\n try {\n const data = await ctx.gql.workspace.request<{ ecoCarbonTotalKg: number }>(\n ops.CARBON_TOTAL_KG,\n { scope, siteId },\n );\n return jsonResult({\n totalKgCo2e: data.ecoCarbonTotalKg,\n scope: scope ?? null,\n siteId: siteId ?? null,\n });\n } catch (error) {\n ctx.logger.error('ecoimpacthub carbon_total failed', { error: String(error) });\n return errorResult(\n `Failed to get carbon total: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'carbon_record_entry')),\n {\n title: 'Record Carbon Entry',\n description:\n 'Record a carbon-ledger entry; CO2e is computed from the activity value and the referenced emission factor (when one is provided). `scope` defaults to SCOPE_1.',\n inputSchema: {\n category: z\n .string()\n .min(1)\n .describe('Activity category (e.g. \"electricity\", \"fleet-diesel\")'),\n activityValue: z.number().describe('Activity quantity (e.g. kWh, litres)'),\n activityUnit: z.string().min(1).describe('Unit of the activity value'),\n periodStart: z.string().describe('Start of the activity period (ISO-8601 DateTime)'),\n scope: EmissionScopeEnum.optional().describe('Emission scope (default SCOPE_1)'),\n factorId: z.string().optional().describe('Emission factor ID used to compute CO2e'),\n siteId: z.string().optional().describe('Associated site ID'),\n notes: z.string().optional().describe('Free-text notes'),\n },\n },\n async ({\n category,\n activityValue,\n activityUnit,\n periodStart,\n scope,\n factorId,\n siteId,\n notes,\n }) => {\n try {\n const input: Record<string, unknown> = {\n category,\n activityValue,\n activityUnit,\n periodStart,\n };\n if (scope !== undefined) input.scope = scope;\n if (factorId !== undefined) input.factorId = factorId;\n if (siteId !== undefined) input.siteId = siteId;\n if (notes !== undefined) input.notes = notes;\n\n const data = await ctx.gql.workspace.request<{\n ecoRecordCarbonEntry: Record<string, unknown>;\n }>(ops.RECORD_CARBON_ENTRY, { input });\n return jsonResult(data.ecoRecordCarbonEntry);\n } catch (error) {\n ctx.logger.error('ecoimpacthub carbon_record_entry failed', { error: String(error) });\n return errorResult(\n `Failed to record carbon entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'carbon_verify_entry')),\n {\n title: 'Verify Carbon Entry',\n description: 'Mark a carbon-ledger entry as VERIFIED.',\n inputSchema: { id: z.string().describe('Carbon entry ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoVerifyCarbonEntry: Record<string, unknown>;\n }>(ops.VERIFY_CARBON_ENTRY, { id });\n return jsonResult(data.ecoVerifyCarbonEntry);\n } catch (error) {\n ctx.logger.error('ecoimpacthub carbon_verify_entry failed', { error: String(error) });\n return errorResult(\n `Failed to verify carbon entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub emission-factor tools — CO2e conversion factor library.\n *\n * Surface (2): emission_factors_list, emission_factors_create.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { EmissionScopeEnum } from './shared.js';\n\nexport function registerEmissionFactorTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'emission_factors_list')),\n {\n title: 'List Emission Factors',\n description:\n 'List emission factors, optionally filtered by scope and/or limited to active factors.',\n inputSchema: {\n scope: EmissionScopeEnum.optional().describe('Filter by emission scope'),\n activeOnly: z.boolean().optional().describe('Only return active factors'),\n },\n },\n async ({ scope, activeOnly }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListEmissionFactors: Array<Record<string, unknown>>;\n }>(ops.LIST_EMISSION_FACTORS, { scope, activeOnly });\n return jsonResult(data.ecoListEmissionFactors);\n } catch (error) {\n ctx.logger.error('ecoimpacthub emission_factors_list failed', { error: String(error) });\n return errorResult(\n `Failed to list emission factors: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'emission_factors_create')),\n {\n title: 'Create Emission Factor',\n description:\n 'Create an emission factor (kg CO2e per activity unit) for use in carbon-entry calculations. `scope` defaults to SCOPE_1.',\n inputSchema: {\n name: z.string().min(1).describe('Factor name (e.g. \"Grid electricity – IN\")'),\n activityUnit: z\n .string()\n .min(1)\n .describe('Activity unit the factor applies to (e.g. \"kWh\")'),\n factorKgco2e: z.number().describe('Kilograms CO2e per activity unit'),\n scope: EmissionScopeEnum.optional().describe('Emission scope (default SCOPE_1)'),\n source: z.string().optional().describe('Citation / source of the factor'),\n validYear: z.number().int().optional().describe('Year the factor is valid for'),\n },\n },\n async ({ name, activityUnit, factorKgco2e, scope, source, validYear }) => {\n try {\n const input: Record<string, unknown> = { name, activityUnit, factorKgco2e };\n if (scope !== undefined) input.scope = scope;\n if (source !== undefined) input.source = source;\n if (validYear !== undefined) input.validYear = validYear;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateEmissionFactor: Record<string, unknown>;\n }>(ops.CREATE_EMISSION_FACTOR, { input });\n return jsonResult(data.ecoCreateEmissionFactor);\n } catch (error) {\n ctx.logger.error('ecoimpacthub emission_factors_create failed', { error: String(error) });\n return errorResult(\n `Failed to create emission factor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub reduction-target tools — emissions/impact reduction goals.\n *\n * Surface (3): reduction_targets_{list,create,set_status}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { ReductionTargetStatusEnum } from './shared.js';\n\nexport function registerTargetTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reduction_targets_list')),\n {\n title: 'List Reduction Targets',\n description: 'List emissions/impact reduction targets, optionally filtered by status.',\n inputSchema: {\n status: ReductionTargetStatusEnum.optional().describe('Filter by target status'),\n },\n },\n async ({ status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListReductionTargets: Array<Record<string, unknown>>;\n }>(ops.LIST_REDUCTION_TARGETS, { status });\n return jsonResult(data.ecoListReductionTargets);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reduction_targets_list failed', { error: String(error) });\n return errorResult(\n `Failed to list reduction targets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reduction_targets_create')),\n {\n title: 'Create Reduction Target',\n description:\n 'Create an emissions/impact reduction target (baseline → target over a metric, with baseline + target years).',\n inputSchema: {\n name: z.string().min(1).describe('Target name'),\n metric: z.string().min(1).describe('Metric being reduced (e.g. \"Scope 1+2 CO2e\")'),\n baselineValue: z.number().describe('Baseline metric value'),\n baselineYear: z.number().int().describe('Baseline year'),\n targetValue: z.number().describe('Target metric value'),\n targetYear: z.number().int().describe('Target year'),\n unit: z.string().min(1).describe('Unit of the metric values'),\n description: z.string().optional().describe('Target description'),\n },\n },\n async ({\n name,\n metric,\n baselineValue,\n baselineYear,\n targetValue,\n targetYear,\n unit,\n description,\n }) => {\n try {\n const input: Record<string, unknown> = {\n name,\n metric,\n baselineValue,\n baselineYear,\n targetValue,\n targetYear,\n unit,\n };\n if (description !== undefined) input.description = description;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateReductionTarget: Record<string, unknown>;\n }>(ops.CREATE_REDUCTION_TARGET, { input });\n return jsonResult(data.ecoCreateReductionTarget);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reduction_targets_create failed', { error: String(error) });\n return errorResult(\n `Failed to create reduction target: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reduction_targets_set_status')),\n {\n title: 'Set Reduction Target Status',\n description:\n 'Update the status of a reduction target (e.g. PROPOSED → ACTIVE → ACHIEVED / MISSED / RETIRED).',\n inputSchema: {\n id: z.string().describe('Reduction target ID'),\n status: ReductionTargetStatusEnum.describe('New target status'),\n },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoSetReductionTargetStatus: Record<string, unknown>;\n }>(ops.SET_REDUCTION_TARGET_STATUS, { id, status });\n return jsonResult(data.ecoSetReductionTargetStatus);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reduction_targets_set_status failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to set reduction target status: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub sustainability-report tools — disclosure reports + line items.\n *\n * Surface (5): reports_{get,list,create,add_line_item,publish}.\n * `reports_get` (ecoReport) returns the report with its line items;\n * `reports_list` (ecoListReports) is connection-paginated.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n ReportFrameworkEnum,\n ReportStatusEnum,\n buildPagination,\n paginationInputShape,\n} from './shared.js';\n\nexport function registerReportTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reports_get')),\n {\n title: 'Get Report',\n description: 'Fetch a single sustainability report by ID, including its line items.',\n inputSchema: { id: z.string().describe('Report ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoReport: Record<string, unknown> | null;\n }>(ops.GET_REPORT, { id });\n if (!data.ecoReport) return errorResult(`Report ${id} not found`);\n return jsonResult(data.ecoReport);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reports_get failed', { error: String(error) });\n return errorResult(\n `Failed to get report: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reports_list')),\n {\n title: 'List Reports',\n description:\n 'List sustainability reports, optionally filtered by status, with cursor pagination.',\n inputSchema: {\n status: ReportStatusEnum.optional().describe('Filter by report status'),\n ...paginationInputShape,\n },\n },\n async ({ status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListReports: {\n items: Array<Record<string, unknown>>;\n pageInfo: Record<string, unknown>;\n };\n }>(ops.LIST_REPORTS, {\n status,\n pagination: buildPagination({ limit, offset, cursor }),\n });\n return jsonResult(data.ecoListReports);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reports_list failed', { error: String(error) });\n return errorResult(\n `Failed to list reports: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reports_create')),\n {\n title: 'Create Report',\n description:\n 'Create a sustainability report for a reporting period. `framework` defaults to GHG_PROTOCOL.',\n inputSchema: {\n title: z.string().min(1).describe('Report title'),\n periodStart: z.string().describe('Reporting period start (ISO-8601 DateTime)'),\n periodEnd: z.string().describe('Reporting period end (ISO-8601 DateTime)'),\n framework: ReportFrameworkEnum.optional().describe(\n 'Reporting framework (default GHG_PROTOCOL)',\n ),\n summary: z.string().optional().describe('Report summary'),\n },\n },\n async ({ title, periodStart, periodEnd, framework, summary }) => {\n try {\n const input: Record<string, unknown> = { title, periodStart, periodEnd };\n if (framework !== undefined) input.framework = framework;\n if (summary !== undefined) input.summary = summary;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateReport: Record<string, unknown>;\n }>(ops.CREATE_REPORT, { input });\n return jsonResult(data.ecoCreateReport);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reports_create failed', { error: String(error) });\n return errorResult(\n `Failed to create report: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reports_add_line_item')),\n {\n title: 'Add Report Line Item',\n description:\n 'Add a line item to a sustainability report, optionally linked to a carbon-ledger entry.',\n inputSchema: {\n reportId: z.string().min(1).describe('Owning report ID'),\n label: z.string().min(1).describe('Line-item label'),\n value: z.number().describe('Line-item value'),\n unit: z.string().min(1).describe('Unit of the value'),\n category: z.string().optional().describe('Line-item category'),\n carbonEntryId: z.string().optional().describe('Linked carbon-entry ID'),\n },\n },\n async ({ reportId, label, value, unit, category, carbonEntryId }) => {\n try {\n const input: Record<string, unknown> = { reportId, label, value, unit };\n if (category !== undefined) input.category = category;\n if (carbonEntryId !== undefined) input.carbonEntryId = carbonEntryId;\n\n const data = await ctx.gql.workspace.request<{\n ecoAddReportLineItem: Record<string, unknown>;\n }>(ops.ADD_REPORT_LINE_ITEM, { input });\n return jsonResult(data.ecoAddReportLineItem);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reports_add_line_item failed', { error: String(error) });\n return errorResult(\n `Failed to add report line item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reports_publish')),\n {\n title: 'Publish Report',\n description:\n 'Publish a sustainability report, optionally attaching an exported wspace-files File as the published artifact.',\n inputSchema: {\n id: z.string().describe('Report ID'),\n fileId: z.string().optional().describe('wspace-files File ID of the exported artifact'),\n },\n },\n async ({ id, fileId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoPublishReport: Record<string, unknown>;\n }>(ops.PUBLISH_REPORT, { id, fileId });\n return jsonResult(data.ecoPublishReport);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reports_publish failed', { error: String(error) });\n return errorResult(\n `Failed to publish report: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub health tool.\n *\n * Surface (1): health — maps to the @public ecoHealth query (no auth required).\n */\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerHealthTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'health')),\n {\n title: 'EcoImpactHub Health Check',\n description:\n 'Public liveness/identity probe for the EcoImpactHub subgraph (ecoHealth). Requires no authentication.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{ ecoHealth: string }>(ops.HEALTH, {});\n return jsonResult({ ok: true, status: data.ecoHealth });\n } catch (error) {\n ctx.logger.error('ecoimpacthub health failed', { error: String(error) });\n return errorResult(\n `EcoImpactHub health check failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpResourceUri, type McpContext } from '../../core/index.js';\nimport { LIST_SITES, LIST_REDUCTION_TARGETS, CARBON_TOTAL_KG } from './operations.js';\n\n/**\n * Read-only EcoImpactHub MCP resources. URIs are product-prefixed via\n * mcpResourceUri so they don't collide when multiple MCP servers run side by\n * side. Each is tracked at function entry so the shell manifest reflects what\n * was registered even though registration is imperative.\n */\nexport function registerEcoimpacthubResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const sitesUri = track(mcpResourceUri(ctx.productName, 'sites'));\n const targetsUri = track(mcpResourceUri(ctx.productName, 'targets'));\n const carbonUri = track(mcpResourceUri(ctx.productName, 'carbon'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'ecoimpacthub-schema',\n schemaUri,\n {\n title: 'EcoImpactHub Domain Schema',\n description:\n 'Overview of the EcoImpactHub environmental-impact domain — entities, enums, and the per-entity tool surface.',\n mimeType: 'text/plain',\n },\n async () => {\n ctx.logger.debug(`Resource ${schemaUri} requested`);\n const schema = `# EcoImpactHub Domain (Overview)\n\nEnvironmental-impact, sustainability + biodiversity monitoring platform.\n\n## Entities\n- EcoSite — a monitored environmental site (sensors, thresholds)\n- EcoSensor — monitoring hardware attached to a site\n- EcoAlertThreshold — per-site/parameter breach rule\n- EcoMeasurement — a telemetry reading (auto breach-flagged)\n- EcoSpecies — biodiversity catalog entry (observations)\n- EcoObservation — a species sighting (+ optional file evidence)\n- EcoHabitatProject (+EcoRestorationActivity) — restoration project + activity log\n- EcoCarbonEntry — a carbon-ledger entry (CO2e)\n- EcoEmissionFactor — kg CO2e per activity unit\n- EcoReductionTarget — emissions/impact reduction goal\n- EcoReport (+EcoReportLineItem) — sustainability disclosure report\n\n## Enums\n- EcoSiteStatus: ACTIVE, ARCHIVED, MONITORING_PAUSED\n- EcoSiteType: AIRSHED, COASTAL, FACILITY, FARM, FOREST, OTHER, PROTECTED_AREA, WATERSHED, WETLAND\n- EcoSensorKind: ACOUSTIC, AIR_QUALITY, CAMERA_TRAP, ENERGY_METER, FLOW, MANUAL, SOIL, WATER_QUALITY, WEATHER\n- EcoSensorStatus: DEGRADED, MAINTENANCE, OFFLINE, ONLINE, RETIRED\n- EcoThresholdDirection: ABOVE, BELOW, OUTSIDE_RANGE | EcoThresholdSeverity: CRITICAL, INFO, WARNING\n- EcoMeasurementSource: CALCULATED, IMPORT, MANUAL, SATELLITE, SENSOR\n- EcoConservationStatus: CRITICALLY_ENDANGERED, DATA_DEFICIENT, ENDANGERED, EXTINCT_IN_WILD, LEAST_CONCERN, NEAR_THREATENED, NOT_EVALUATED, VULNERABLE\n- EcoTaxonGroup: AMPHIBIAN, BIRD, FISH, FUNGI, INSECT, MAMMAL, OTHER, PLANT, REPTILE\n- EcoObservationMethod: ACOUSTIC, CAMERA_TRAP, COMMUNITY_REPORT, DIRECT_SIGHTING, EDNA, TELEMETRY, TRACKS_SIGNS\n- EcoHabitatProjectStatus: CANCELLED, COMPLETED, IN_PROGRESS, MONITORING, ON_HOLD, PLANNED\n- EcoRestorationActivityType: COMMUNITY_ENGAGEMENT, INVASIVE_REMOVAL, PLANTING, REWILDING, SOIL_REMEDIATION, SURVEY, WATER_MANAGEMENT\n- EcoEmissionScope: SCOPE_1, SCOPE_2, SCOPE_3 | EcoCarbonEntryStatus: ADJUSTED, DRAFT, RECORDED, VERIFIED\n- EcoReductionTargetStatus: ACHIEVED, ACTIVE, MISSED, PROPOSED, RETIRED\n- EcoReportFramework: CDP, CUSTOM, GHG_PROTOCOL, GRI, SASB, TCFD | EcoReportStatus: ARCHIVED, DRAFT, IN_REVIEW, PUBLISHED\n\n## Tool groups\nsites, sensors, thresholds, measurements, species, observations, habitat,\ncarbon, emissions, targets, reports, health.\nAll run against the WORKSPACE gateway (workspace-scoped) except the public health probe.\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://sites — monitored site directory\n server.registerResource(\n 'ecoimpacthub-sites',\n sitesUri,\n {\n title: 'EcoImpactHub Site Directory',\n description: 'The first 50 monitored sites in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${sitesUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ ecoListSites: unknown }>(LIST_SITES, {\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: sitesUri,\n text: JSON.stringify(data.ecoListSites, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: sitesUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://targets — reduction targets\n server.registerResource(\n 'ecoimpacthub-targets',\n targetsUri,\n {\n title: 'EcoImpactHub Reduction Targets',\n description: 'All emissions/impact reduction targets in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${targetsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ ecoListReductionTargets: unknown }>(\n LIST_REDUCTION_TARGETS,\n {},\n );\n return {\n contents: [\n {\n uri: targetsUri,\n text: JSON.stringify(data.ecoListReductionTargets, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: targetsUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://carbon — workspace CO2e total\n server.registerResource(\n 'ecoimpacthub-carbon',\n carbonUri,\n {\n title: 'EcoImpactHub Carbon Total',\n description: 'Total CO2e (kg) recorded across the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${carbonUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ ecoCarbonTotalKg: unknown }>(\n CARBON_TOTAL_KG,\n {},\n );\n return {\n contents: [\n {\n uri: carbonUri,\n text: JSON.stringify({ totalKgCo2e: data.ecoCarbonTotalKg }, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: carbonUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n}\n","import { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpPromptName, type McpContext } from '../../core/index.js';\n\n/**\n * EcoImpactHub MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerEcoimpacthubPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const siteOnboardingName = track(mcpPromptName(p, 'site-onboarding'));\n const reportingName = track(mcpPromptName(p, 'sustainability-reporting'));\n\n // <product>-site-onboarding — stand up a monitored site\n server.registerPrompt(\n siteOnboardingName,\n {\n title: 'Site Monitoring Onboarding',\n description:\n 'Guide for standing up a monitored EcoImpactHub site end to end: create the site, attach sensors, define alert thresholds, and record a first measurement.',\n argsSchema: {\n name: z.string().optional().describe('Site name'),\n type: z.string().optional().describe('Site type'),\n },\n },\n ({ name, type }) => {\n ctx.logger.debug(`Prompt ${siteOnboardingName} called`, { name, type });\n const nameNote = name ? `Use the site name \"${name}\".` : 'Ask the user for the site name.';\n const typeNote = type ? `Use type ${type}.` : 'Help the user pick an EcoSiteType.';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me onboard a new EcoImpactHub monitored site.\n\n1. **Create Site**: Use ${p}_sites_create. ${nameNote} ${typeNote} Optionally set region/country and latitude/longitude.\n2. **Attach Sensors**: Use ${p}_sensors_create for each monitoring device — set siteId, name, kind (e.g. AIR_QUALITY, WATER_QUALITY), and unit.\n3. **Define Thresholds**: Use ${p}_thresholds_create per monitored parameter — set direction (ABOVE/BELOW/OUTSIDE_RANGE), severity, and limit/min/max values.\n4. **Record a Measurement**: Use ${p}_measurements_record to log a first reading; it is auto-evaluated against the active thresholds.\n5. **Verify**: Use ${p}_sites_get to confirm the site shows its sensors + thresholds, and ${p}_measurements_list with breachesOnly=true to spot any breaches.\n\nShow results at each step and confirm before moving on.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-sustainability-reporting — carbon ledger → disclosure report\n server.registerPrompt(\n reportingName,\n {\n title: 'Sustainability Reporting',\n description:\n 'Workflow for compiling a sustainability disclosure: review the carbon ledger and targets, draft a report, add line items, and publish.',\n argsSchema: {\n framework: z.string().optional().describe('Reporting framework (e.g. GHG_PROTOCOL, GRI)'),\n },\n },\n ({ framework }) => {\n ctx.logger.debug(`Prompt ${reportingName} called`, { framework });\n const frameworkNote = framework\n ? `Use the ${framework} framework.`\n : 'Help the user pick an EcoReportFramework (default GHG_PROTOCOL).';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Compile an EcoImpactHub sustainability report. ${frameworkNote}\n\n1. **Carbon Ledger**: Use ${p}_carbon_total for the headline CO2e and ${p}_carbon_entries_list to review entries by scope; verify any pending entries with ${p}_carbon_entries_verify.\n2. **Emission Factors**: Use ${p}_emission_factors_list to confirm the factors backing the entries are current.\n3. **Targets**: Use ${p}_targets_list to check progress against reduction targets.\n4. **Create Report**: Use ${p}_reports_create for the reporting period (periodStart/periodEnd, framework).\n5. **Line Items**: Use ${p}_reports_add_line_item for each disclosure figure, linking carbonEntryId where applicable.\n6. **Publish**: Once reviewed, use ${p}_reports_publish (optionally attaching an exported file).\n\nSummarize totals and any targets at risk after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * EcoImpactHub module — domain module for the future-products ecosystem program.\n *\n * Covers all 12 @key entities of wspace-ecoimpacthub-svc grouped into\n * per-entity sub-APIs: sites, sensors, thresholds, measurements, species,\n * observations, habitat (projects + restoration activities), carbon (ledger\n * entries + totals), emissions (factors), targets, reports, health. Mirrors the\n * rich kadaikodi module's structure (tools/<entity>.ts + resources.ts +\n * prompts.ts) and the canonical tags module's typing discipline.\n *\n * Backend: ~/products/wspace/ecoimpacthub/wspace-ecoimpacthub-svc/\n * (Hive service name `ecoimpacthub`). All operations run against the WORKSPACE\n * gateway; the @public ecoHealth probe is exposed as `<product>_health`.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerSiteTools } from './tools/sites.js';\nimport { registerSensorTools } from './tools/sensors.js';\nimport { registerThresholdTools } from './tools/thresholds.js';\nimport { registerMeasurementTools } from './tools/measurements.js';\nimport { registerSpeciesTools } from './tools/species.js';\nimport { registerObservationTools } from './tools/observations.js';\nimport { registerHabitatTools } from './tools/habitat.js';\nimport { registerCarbonTools } from './tools/carbon.js';\nimport { registerEmissionFactorTools } from './tools/emissions.js';\nimport { registerTargetTools } from './tools/targets.js';\nimport { registerReportTools } from './tools/reports.js';\nimport { registerHealthTools } from './tools/health.js';\nimport { registerEcoimpacthubResources } from './resources.js';\nimport { registerEcoimpacthubPrompts } from './prompts.js';\n\nconst ecoimpacthubModule: McpModule = {\n id: 'ecoimpacthub',\n version: '0.0.1',\n displayName: 'EcoImpactHub',\n dependsOn: ['auth'],\n capabilities: { tools: {}, resources: {}, prompts: {} },\n\n register(server: McpServer, ctx: McpContext): ModuleRegistration {\n const tools: string[] = [];\n const resources: string[] = [];\n const prompts: string[] = [];\n\n const trackTool = (n: string): string => {\n tools.push(n);\n return n;\n };\n const trackResource = (uri: string): string => {\n resources.push(uri);\n return uri;\n };\n const trackPrompt = (n: string): string => {\n prompts.push(n);\n return n;\n };\n\n registerSiteTools(server, ctx, trackTool);\n registerSensorTools(server, ctx, trackTool);\n registerThresholdTools(server, ctx, trackTool);\n registerMeasurementTools(server, ctx, trackTool);\n registerSpeciesTools(server, ctx, trackTool);\n registerObservationTools(server, ctx, trackTool);\n registerHabitatTools(server, ctx, trackTool);\n registerCarbonTools(server, ctx, trackTool);\n registerEmissionFactorTools(server, ctx, trackTool);\n registerTargetTools(server, ctx, trackTool);\n registerReportTools(server, ctx, trackTool);\n registerHealthTools(server, ctx, trackTool);\n\n registerEcoimpacthubResources(server, ctx, trackResource);\n registerEcoimpacthubPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default ecoimpacthubModule;\n"]}
1
+ {"version":3,"sources":["../../../src/modules/ecoimpacthub/operations.ts","../../../src/modules/ecoimpacthub/tools/shared.ts","../../../src/modules/ecoimpacthub/tools/sites.ts","../../../src/modules/ecoimpacthub/tools/sensors.ts","../../../src/modules/ecoimpacthub/tools/thresholds.ts","../../../src/modules/ecoimpacthub/tools/measurements.ts","../../../src/modules/ecoimpacthub/tools/species.ts","../../../src/modules/ecoimpacthub/tools/observations.ts","../../../src/modules/ecoimpacthub/tools/habitat.ts","../../../src/modules/ecoimpacthub/tools/carbon.ts","../../../src/modules/ecoimpacthub/tools/emissions.ts","../../../src/modules/ecoimpacthub/tools/targets.ts","../../../src/modules/ecoimpacthub/tools/reports.ts","../../../src/modules/ecoimpacthub/tools/health.ts","../../../src/modules/ecoimpacthub/resources.ts","../../../src/modules/ecoimpacthub/prompts.ts","../../../src/modules/ecoimpacthub/index.ts"],"names":["z"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Centralized GraphQL operations for the EcoImpactHub MCP module.\n *\n * EcoImpactHub is the environmental-impact + sustainability + biodiversity\n * monitoring platform (future-products ecosystem). Backend subgraph:\n * ~/products/wspace/ecoimpacthub/wspace-ecoimpacthub-svc/\n * (Hive service name `ecoimpacthub`).\n *\n * All operations run against the WORKSPACE gateway. Workspace scoping is\n * carried by the gateway headers (x-workspace-id / X-Workspace-Authorization)\n * issued by the auth module — EcoImpactHub inputs do NOT carry a workspaceId.\n *\n * Every Query/Mutation root field is prefixed `eco*` in the real schema and is\n * called here by its REAL name. List queries that return *Connection types use\n * `PaginationInput { cursor, limit, offset }`; the plain-array list queries take\n * direct filter args. Uses template-string interpolation (not gql tagged\n * fragments) to match the canonical kadaikodi module's operations file.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const SITE_FIELDS = `\n id name code description type status region country latitude longitude\n areaHectares workspaceId createdAt updatedAt\n`;\n\nexport const SENSOR_FIELDS = `\n id name siteId kind status unit hardwareId installedAt lastReadingAt\n workspaceId createdAt updatedAt\n`;\n\nexport const THRESHOLD_FIELDS = `\n id siteId parameter direction severity minValue maxValue limitValue unit\n isActive workspaceId createdAt updatedAt\n`;\n\nexport const MEASUREMENT_FIELDS = `\n id siteId sensorId parameter value unit recordedAt source isBreach notes\n workspaceId createdAt updatedAt\n`;\n\nexport const SPECIES_FIELDS = `\n id commonName scientificName taxonGroup conservationStatus isPriority\n description workspaceId createdAt updatedAt\n`;\n\nexport const OBSERVATION_FIELDS = `\n id speciesId siteId observerId observedAt method count latitude longitude\n notes evidence { id } workspaceId createdAt updatedAt\n`;\n\nexport const RESTORATION_ACTIVITY_FIELDS = `\n id projectId type summary details performedAt quantity unit workspaceId\n createdAt updatedAt\n`;\n\nexport const HABITAT_PROJECT_FIELDS = `\n id name description siteId managerId status targetHectares budgetAmount\n currency startDate endDate completedAt workspaceId createdAt updatedAt\n`;\n\nexport const EMISSION_FACTOR_FIELDS = `\n id name scope activityUnit factorKgco2e source validYear isActive\n workspaceId createdAt updatedAt\n`;\n\nexport const CARBON_ENTRY_FIELDS = `\n id category scope activityValue activityUnit co2eKg factorId siteId\n periodStart status notes workspaceId createdAt updatedAt\n`;\n\nexport const REDUCTION_TARGET_FIELDS = `\n id name metric description baselineValue baselineYear targetValue targetYear\n unit status workspaceId createdAt updatedAt\n`;\n\nexport const REPORT_LINE_ITEM_FIELDS = `\n id reportId label category value unit carbonEntryId workspaceId\n createdAt updatedAt\n`;\n\nexport const REPORT_FIELDS = `\n id title summary framework status periodStart periodEnd publishedAt\n file { id } workspaceId createdAt updatedAt\n lineItems { ${REPORT_LINE_ITEM_FIELDS} }\n`;\n\n// ---------------------------------------------------------------------------\n// Sites\n// ---------------------------------------------------------------------------\n\nexport const GET_SITE = `\n query EcoGetSite($id: ID!) {\n ecoSite(id: $id) {\n ${SITE_FIELDS}\n sensors { id name kind status unit }\n thresholds { id parameter direction severity isActive }\n }\n }\n`;\n\nexport const LIST_SITES = `\n query EcoListSites(\n $status: EcoSiteStatus\n $type: EcoSiteType\n $pagination: PaginationInput\n ) {\n ecoListSites(status: $status, type: $type, pagination: $pagination) {\n items { ${SITE_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }\n`;\n\nexport const CREATE_SITE = `\n mutation EcoCreateSite($input: EcoCreateSiteInput!) {\n ecoCreateSite(input: $input) {\n ${SITE_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_SITE = `\n mutation EcoUpdateSite($id: ID!, $input: EcoUpdateSiteInput!) {\n ecoUpdateSite(id: $id, input: $input) {\n ${SITE_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_SITE = `\n mutation EcoArchiveSite($id: ID!) {\n ecoArchiveSite(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Sensors\n// ---------------------------------------------------------------------------\n\nexport const LIST_SENSORS = `\n query EcoListSensors($siteId: ID, $kind: EcoSensorKind, $status: EcoSensorStatus) {\n ecoListSensors(siteId: $siteId, kind: $kind, status: $status) {\n ${SENSOR_FIELDS}\n site { id name }\n }\n }\n`;\n\nexport const CREATE_SENSOR = `\n mutation EcoCreateSensor($input: EcoCreateSensorInput!) {\n ecoCreateSensor(input: $input) {\n ${SENSOR_FIELDS}\n }\n }\n`;\n\nexport const SET_SENSOR_STATUS = `\n mutation EcoSetSensorStatus($id: ID!, $status: EcoSensorStatus!) {\n ecoSetSensorStatus(id: $id, status: $status) {\n ${SENSOR_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Thresholds\n// ---------------------------------------------------------------------------\n\nexport const LIST_THRESHOLDS = `\n query EcoListThresholds($siteId: ID) {\n ecoListThresholds(siteId: $siteId) {\n ${THRESHOLD_FIELDS}\n }\n }\n`;\n\nexport const CREATE_THRESHOLD = `\n mutation EcoCreateThreshold($input: EcoCreateThresholdInput!) {\n ecoCreateThreshold(input: $input) {\n ${THRESHOLD_FIELDS}\n }\n }\n`;\n\nexport const SET_THRESHOLD_ACTIVE = `\n mutation EcoSetThresholdActive($id: ID!, $isActive: Boolean!) {\n ecoSetThresholdActive(id: $id, isActive: $isActive) {\n ${THRESHOLD_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Measurements\n// ---------------------------------------------------------------------------\n\nexport const LIST_MEASUREMENTS = `\n query EcoListMeasurements(\n $siteId: ID\n $sensorId: ID\n $parameter: String\n $breachesOnly: Boolean\n $pagination: PaginationInput\n ) {\n ecoListMeasurements(\n siteId: $siteId\n sensorId: $sensorId\n parameter: $parameter\n breachesOnly: $breachesOnly\n pagination: $pagination\n ) {\n items { ${MEASUREMENT_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }\n`;\n\nexport const RECORD_MEASUREMENT = `\n mutation EcoRecordMeasurement($input: EcoRecordMeasurementInput!) {\n ecoRecordMeasurement(input: $input) {\n ${MEASUREMENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Species\n// ---------------------------------------------------------------------------\n\nexport const GET_SPECIES = `\n query EcoGetSpecies($id: ID!) {\n ecoSpecies(id: $id) {\n ${SPECIES_FIELDS}\n observations { id observedAt method count siteId }\n }\n }\n`;\n\nexport const LIST_SPECIES = `\n query EcoListSpecies(\n $taxonGroup: EcoTaxonGroup\n $conservationStatus: EcoConservationStatus\n $priorityOnly: Boolean\n $pagination: PaginationInput\n ) {\n ecoListSpecies(\n taxonGroup: $taxonGroup\n conservationStatus: $conservationStatus\n priorityOnly: $priorityOnly\n pagination: $pagination\n ) {\n items { ${SPECIES_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }\n`;\n\nexport const CREATE_SPECIES = `\n mutation EcoCreateSpecies($input: EcoCreateSpeciesInput!) {\n ecoCreateSpecies(input: $input) {\n ${SPECIES_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_SPECIES = `\n mutation EcoUpdateSpecies($id: ID!, $input: EcoUpdateSpeciesInput!) {\n ecoUpdateSpecies(id: $id, input: $input) {\n ${SPECIES_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_SPECIES = `\n mutation EcoArchiveSpecies($id: ID!) {\n ecoArchiveSpecies(id: $id)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Observations\n// ---------------------------------------------------------------------------\n\nexport const LIST_OBSERVATIONS = `\n query EcoListObservations(\n $speciesId: ID\n $siteId: ID\n $pagination: PaginationInput\n ) {\n ecoListObservations(speciesId: $speciesId, siteId: $siteId, pagination: $pagination) {\n items {\n ${OBSERVATION_FIELDS}\n species { id commonName }\n }\n pageInfo { cursor hasMore }\n }\n }\n`;\n\nexport const RECORD_OBSERVATION = `\n mutation EcoRecordObservation($input: EcoRecordObservationInput!) {\n ecoRecordObservation(input: $input) {\n ${OBSERVATION_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Habitat projects + restoration activities\n// ---------------------------------------------------------------------------\n\nexport const GET_HABITAT_PROJECT = `\n query EcoGetHabitatProject($id: ID!) {\n ecoHabitatProject(id: $id) {\n ${HABITAT_PROJECT_FIELDS}\n activities { ${RESTORATION_ACTIVITY_FIELDS} }\n }\n }\n`;\n\nexport const LIST_HABITAT_PROJECTS = `\n query EcoListHabitatProjects($status: EcoHabitatProjectStatus) {\n ecoListHabitatProjects(status: $status) {\n ${HABITAT_PROJECT_FIELDS}\n }\n }\n`;\n\nexport const CREATE_HABITAT_PROJECT = `\n mutation EcoCreateHabitatProject($input: EcoCreateHabitatProjectInput!) {\n ecoCreateHabitatProject(input: $input) {\n ${HABITAT_PROJECT_FIELDS}\n }\n }\n`;\n\nexport const TRANSITION_HABITAT_PROJECT = `\n mutation EcoTransitionHabitatProject($id: ID!, $status: EcoHabitatProjectStatus!) {\n ecoTransitionHabitatProject(id: $id, status: $status) {\n ${HABITAT_PROJECT_FIELDS}\n activities { ${RESTORATION_ACTIVITY_FIELDS} }\n }\n }\n`;\n\nexport const LOG_RESTORATION_ACTIVITY = `\n mutation EcoLogRestorationActivity($input: EcoLogRestorationActivityInput!) {\n ecoLogRestorationActivity(input: $input) {\n ${RESTORATION_ACTIVITY_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Carbon ledger + emission factors\n// ---------------------------------------------------------------------------\n\nexport const LIST_CARBON_ENTRIES = `\n query EcoListCarbonEntries(\n $scope: EcoEmissionScope\n $siteId: ID\n $status: EcoCarbonEntryStatus\n $pagination: PaginationInput\n ) {\n ecoListCarbonEntries(\n scope: $scope\n siteId: $siteId\n status: $status\n pagination: $pagination\n ) {\n items {\n ${CARBON_ENTRY_FIELDS}\n factor { id name factorKgco2e }\n }\n pageInfo { cursor hasMore }\n }\n }\n`;\n\nexport const CARBON_TOTAL_KG = `\n query EcoCarbonTotalKg($scope: EcoEmissionScope, $siteId: ID) {\n ecoCarbonTotalKg(scope: $scope, siteId: $siteId)\n }\n`;\n\nexport const RECORD_CARBON_ENTRY = `\n mutation EcoRecordCarbonEntry($input: EcoRecordCarbonEntryInput!) {\n ecoRecordCarbonEntry(input: $input) {\n ${CARBON_ENTRY_FIELDS}\n factor { id name factorKgco2e }\n }\n }\n`;\n\nexport const VERIFY_CARBON_ENTRY = `\n mutation EcoVerifyCarbonEntry($id: ID!) {\n ecoVerifyCarbonEntry(id: $id) {\n ${CARBON_ENTRY_FIELDS}\n }\n }\n`;\n\nexport const LIST_EMISSION_FACTORS = `\n query EcoListEmissionFactors($scope: EcoEmissionScope, $activeOnly: Boolean) {\n ecoListEmissionFactors(scope: $scope, activeOnly: $activeOnly) {\n ${EMISSION_FACTOR_FIELDS}\n }\n }\n`;\n\nexport const CREATE_EMISSION_FACTOR = `\n mutation EcoCreateEmissionFactor($input: EcoCreateEmissionFactorInput!) {\n ecoCreateEmissionFactor(input: $input) {\n ${EMISSION_FACTOR_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Reduction targets\n// ---------------------------------------------------------------------------\n\nexport const LIST_REDUCTION_TARGETS = `\n query EcoListReductionTargets($status: EcoReductionTargetStatus) {\n ecoListReductionTargets(status: $status) {\n ${REDUCTION_TARGET_FIELDS}\n }\n }\n`;\n\nexport const CREATE_REDUCTION_TARGET = `\n mutation EcoCreateReductionTarget($input: EcoCreateReductionTargetInput!) {\n ecoCreateReductionTarget(input: $input) {\n ${REDUCTION_TARGET_FIELDS}\n }\n }\n`;\n\nexport const SET_REDUCTION_TARGET_STATUS = `\n mutation EcoSetReductionTargetStatus($id: ID!, $status: EcoReductionTargetStatus!) {\n ecoSetReductionTargetStatus(id: $id, status: $status) {\n ${REDUCTION_TARGET_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Reports\n// ---------------------------------------------------------------------------\n\nexport const GET_REPORT = `\n query EcoGetReport($id: ID!) {\n ecoReport(id: $id) {\n ${REPORT_FIELDS}\n }\n }\n`;\n\nexport const LIST_REPORTS = `\n query EcoListReports($status: EcoReportStatus, $pagination: PaginationInput) {\n ecoListReports(status: $status, pagination: $pagination) {\n items { ${REPORT_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }\n`;\n\nexport const CREATE_REPORT = `\n mutation EcoCreateReport($input: EcoCreateReportInput!) {\n ecoCreateReport(input: $input) {\n ${REPORT_FIELDS}\n }\n }\n`;\n\nexport const ADD_REPORT_LINE_ITEM = `\n mutation EcoAddReportLineItem($input: EcoAddReportLineItemInput!) {\n ecoAddReportLineItem(input: $input) {\n ${REPORT_LINE_ITEM_FIELDS}\n }\n }\n`;\n\nexport const PUBLISH_REPORT = `\n mutation EcoPublishReport($id: ID!, $fileId: ID) {\n ecoPublishReport(id: $id, fileId: $fileId) {\n ${REPORT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Health\n// ---------------------------------------------------------------------------\n\nexport const HEALTH = `\n query EcoHealth {\n ecoHealth\n }\n`;\n","/**\n * Shared zod schemas for the EcoImpactHub tool surface.\n *\n * Every backend enum is mirrored as a tight zod enum so Claude Desktop grounds\n * tool calls against the exact allowed values. All EcoImpactHub enums are\n * UPPERCASE in the real schema. Pagination is expressed as the backend's\n * `PaginationInput { cursor, limit, offset }` shape.\n */\n\nimport { z } from 'zod';\n\nexport const SiteStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'MONITORING_PAUSED'])\n .describe('Lifecycle/monitoring status of an environmental site');\n\nexport const SiteTypeEnum = z\n .enum([\n 'AIRSHED',\n 'COASTAL',\n 'FACILITY',\n 'FARM',\n 'FOREST',\n 'OTHER',\n 'PROTECTED_AREA',\n 'WATERSHED',\n 'WETLAND',\n ])\n .describe('Classification of an environmental site');\n\nexport const SensorKindEnum = z\n .enum([\n 'ACOUSTIC',\n 'AIR_QUALITY',\n 'CAMERA_TRAP',\n 'ENERGY_METER',\n 'FLOW',\n 'MANUAL',\n 'SOIL',\n 'WATER_QUALITY',\n 'WEATHER',\n ])\n .describe('Kind of monitoring sensor');\n\nexport const SensorStatusEnum = z\n .enum(['DEGRADED', 'MAINTENANCE', 'OFFLINE', 'ONLINE', 'RETIRED'])\n .describe('Operational status of a sensor');\n\nexport const ThresholdDirectionEnum = z\n .enum(['ABOVE', 'BELOW', 'OUTSIDE_RANGE'])\n .describe('Direction a measurement must drift to breach a threshold');\n\nexport const ThresholdSeverityEnum = z\n .enum(['CRITICAL', 'INFO', 'WARNING'])\n .describe('Severity classification of an alert threshold');\n\nexport const MeasurementSourceEnum = z\n .enum(['CALCULATED', 'IMPORT', 'MANUAL', 'SATELLITE', 'SENSOR'])\n .describe('Provenance of a measurement value');\n\nexport const ConservationStatusEnum = z\n .enum([\n 'CRITICALLY_ENDANGERED',\n 'DATA_DEFICIENT',\n 'ENDANGERED',\n 'EXTINCT_IN_WILD',\n 'LEAST_CONCERN',\n 'NEAR_THREATENED',\n 'NOT_EVALUATED',\n 'VULNERABLE',\n ])\n .describe('IUCN-style conservation status of a species');\n\nexport const TaxonGroupEnum = z\n .enum(['AMPHIBIAN', 'BIRD', 'FISH', 'FUNGI', 'INSECT', 'MAMMAL', 'OTHER', 'PLANT', 'REPTILE'])\n .describe('Broad taxonomic group of a species');\n\nexport const ObservationMethodEnum = z\n .enum([\n 'ACOUSTIC',\n 'CAMERA_TRAP',\n 'COMMUNITY_REPORT',\n 'DIRECT_SIGHTING',\n 'EDNA',\n 'TELEMETRY',\n 'TRACKS_SIGNS',\n ])\n .describe('Method by which a species observation was recorded');\n\nexport const HabitatProjectStatusEnum = z\n .enum(['CANCELLED', 'COMPLETED', 'IN_PROGRESS', 'MONITORING', 'ON_HOLD', 'PLANNED'])\n .describe('Lifecycle status of a habitat restoration project');\n\nexport const RestorationActivityTypeEnum = z\n .enum([\n 'COMMUNITY_ENGAGEMENT',\n 'INVASIVE_REMOVAL',\n 'PLANTING',\n 'REWILDING',\n 'SOIL_REMEDIATION',\n 'SURVEY',\n 'WATER_MANAGEMENT',\n ])\n .describe('Type of restoration activity logged against a habitat project');\n\nexport const EmissionScopeEnum = z\n .enum(['SCOPE_1', 'SCOPE_2', 'SCOPE_3'])\n .describe('GHG Protocol emission scope');\n\nexport const CarbonEntryStatusEnum = z\n .enum(['ADJUSTED', 'DRAFT', 'RECORDED', 'VERIFIED'])\n .describe('Lifecycle status of a carbon-ledger entry');\n\nexport const ReductionTargetStatusEnum = z\n .enum(['ACHIEVED', 'ACTIVE', 'MISSED', 'PROPOSED', 'RETIRED'])\n .describe('Status of an emissions-reduction target');\n\nexport const ReportFrameworkEnum = z\n .enum(['CDP', 'CUSTOM', 'GHG_PROTOCOL', 'GRI', 'SASB', 'TCFD'])\n .describe('Sustainability-reporting framework');\n\nexport const ReportStatusEnum = z\n .enum(['ARCHIVED', 'DRAFT', 'IN_REVIEW', 'PUBLISHED'])\n .describe('Lifecycle status of a sustainability report');\n\n/**\n * Builds a backend `PaginationInput { cursor?, limit?, offset? }` from the\n * optional MCP tool args, or `undefined` when no pagination args were given.\n */\nexport function buildPagination(args: {\n limit?: number;\n offset?: number;\n cursor?: string;\n}): Record<string, unknown> | undefined {\n const pagination: Record<string, unknown> = {};\n if (args.limit !== undefined) pagination.limit = args.limit;\n if (args.offset !== undefined) pagination.offset = args.offset;\n if (args.cursor !== undefined) pagination.cursor = args.cursor;\n return Object.keys(pagination).length > 0 ? pagination : undefined;\n}\n\n/** Reusable pagination tool-input fields (mirrors PaginationInput). */\nexport const paginationInputShape = {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n};\n","/**\n * EcoImpactHub site tools — monitored environmental sites CRUD.\n *\n * Surface (5): sites_{get,list,create,update,archive}.\n * `sites_get` (ecoSite) returns the site with its sensors + thresholds;\n * `sites_list` (ecoListSites) is connection-paginated.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { SiteStatusEnum, SiteTypeEnum, buildPagination, paginationInputShape } from './shared.js';\n\nexport function registerSiteTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sites_get')),\n {\n title: 'Get Site',\n description:\n 'Fetch a single monitored environmental site by ID, including its sensors and alert thresholds.',\n inputSchema: { id: z.string().describe('Site ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoSite: Record<string, unknown> | null;\n }>(ops.GET_SITE, { id });\n if (!data.ecoSite) return errorResult(`Site ${id} not found`);\n return jsonResult(data.ecoSite);\n } catch (error) {\n ctx.logger.error('ecoimpacthub sites_get failed', { error: String(error) });\n return errorResult(\n `Failed to get site: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sites_list')),\n {\n title: 'List Sites',\n description:\n 'List monitored sites in the bound workspace with optional status/type filters and cursor pagination.',\n inputSchema: {\n status: SiteStatusEnum.optional().describe('Filter by monitoring status'),\n type: SiteTypeEnum.optional().describe('Filter by site type'),\n ...paginationInputShape,\n },\n },\n async ({ status, type, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListSites: {\n items: Array<Record<string, unknown>>;\n pageInfo: Record<string, unknown>;\n };\n }>(ops.LIST_SITES, {\n status,\n type,\n pagination: buildPagination({ limit, offset, cursor }),\n });\n return jsonResult(data.ecoListSites);\n } catch (error) {\n ctx.logger.error('ecoimpacthub sites_list failed', { error: String(error) });\n return errorResult(\n `Failed to list sites: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sites_create')),\n {\n title: 'Create Site',\n description:\n 'Register a new monitored environmental site (facility, forest, watershed, etc.).',\n inputSchema: {\n name: z.string().min(1).describe('Site display name'),\n type: SiteTypeEnum.optional().describe('Site type (default FACILITY)'),\n status: SiteStatusEnum.optional().describe('Initial status (default ACTIVE)'),\n code: z.string().optional().describe('Short site code'),\n description: z.string().optional().describe('Site description'),\n region: z.string().optional().describe('Region / sub-national area'),\n country: z.string().optional().describe('Country'),\n latitude: z.number().optional().describe('Latitude (decimal degrees)'),\n longitude: z.number().optional().describe('Longitude (decimal degrees)'),\n areaHectares: z.number().optional().describe('Site area in hectares'),\n },\n },\n async ({\n name,\n type,\n status,\n code,\n description,\n region,\n country,\n latitude,\n longitude,\n areaHectares,\n }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (type !== undefined) input.type = type;\n if (status !== undefined) input.status = status;\n if (code !== undefined) input.code = code;\n if (description !== undefined) input.description = description;\n if (region !== undefined) input.region = region;\n if (country !== undefined) input.country = country;\n if (latitude !== undefined) input.latitude = latitude;\n if (longitude !== undefined) input.longitude = longitude;\n if (areaHectares !== undefined) input.areaHectares = areaHectares;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateSite: Record<string, unknown>;\n }>(ops.CREATE_SITE, { input });\n return jsonResult(data.ecoCreateSite);\n } catch (error) {\n ctx.logger.error('ecoimpacthub sites_create failed', { error: String(error) });\n return errorResult(\n `Failed to create site: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sites_update')),\n {\n title: 'Update Site',\n description: 'Update a monitored site. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Site ID'),\n name: z.string().optional().describe('Updated name'),\n type: SiteTypeEnum.optional().describe('Updated site type'),\n status: SiteStatusEnum.optional().describe('Updated monitoring status'),\n code: z.string().optional().describe('Updated site code'),\n description: z.string().optional().describe('Updated description'),\n region: z.string().optional().describe('Updated region'),\n country: z.string().optional().describe('Updated country'),\n latitude: z.number().optional().describe('Updated latitude'),\n longitude: z.number().optional().describe('Updated longitude'),\n areaHectares: z.number().optional().describe('Updated area in hectares'),\n },\n },\n async ({\n id,\n name,\n type,\n status,\n code,\n description,\n region,\n country,\n latitude,\n longitude,\n areaHectares,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (type !== undefined) input.type = type;\n if (status !== undefined) input.status = status;\n if (code !== undefined) input.code = code;\n if (description !== undefined) input.description = description;\n if (region !== undefined) input.region = region;\n if (country !== undefined) input.country = country;\n if (latitude !== undefined) input.latitude = latitude;\n if (longitude !== undefined) input.longitude = longitude;\n if (areaHectares !== undefined) input.areaHectares = areaHectares;\n\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable site field');\n }\n\n const data = await ctx.gql.workspace.request<{\n ecoUpdateSite: Record<string, unknown>;\n }>(ops.UPDATE_SITE, { id, input });\n return jsonResult(data.ecoUpdateSite);\n } catch (error) {\n ctx.logger.error('ecoimpacthub sites_update failed', { error: String(error) });\n return errorResult(\n `Failed to update site: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sites_archive')),\n {\n title: 'Archive Site',\n description: 'Archive a monitored site (soft delete). Returns true on success.',\n inputSchema: { id: z.string().describe('Site ID') },\n annotations: { destructiveHint: true },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ ecoArchiveSite: boolean }>(\n ops.ARCHIVE_SITE,\n {\n id,\n },\n );\n return jsonResult({ ok: data.ecoArchiveSite, id });\n } catch (error) {\n ctx.logger.error('ecoimpacthub sites_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive site: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub sensor tools — monitoring hardware attached to sites.\n *\n * Surface (3): sensors_{list,create,set_status}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { SensorKindEnum, SensorStatusEnum } from './shared.js';\n\nexport function registerSensorTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sensors_list')),\n {\n title: 'List Sensors',\n description:\n 'List monitoring sensors, optionally filtered by site, kind, and/or operational status.',\n inputSchema: {\n siteId: z.string().optional().describe('Filter by site ID'),\n kind: SensorKindEnum.optional().describe('Filter by sensor kind'),\n status: SensorStatusEnum.optional().describe('Filter by operational status'),\n },\n },\n async ({ siteId, kind, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListSensors: Array<Record<string, unknown>>;\n }>(ops.LIST_SENSORS, { siteId, kind, status });\n return jsonResult(data.ecoListSensors);\n } catch (error) {\n ctx.logger.error('ecoimpacthub sensors_list failed', { error: String(error) });\n return errorResult(\n `Failed to list sensors: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sensors_create')),\n {\n title: 'Create Sensor',\n description:\n 'Provision a new sensor on a site. `kind` defaults to MANUAL and `status` to ONLINE.',\n inputSchema: {\n siteId: z.string().min(1).describe('Owning site ID'),\n name: z.string().min(1).describe('Sensor display name'),\n kind: SensorKindEnum.optional().describe('Sensor kind (default MANUAL)'),\n status: SensorStatusEnum.optional().describe('Initial status (default ONLINE)'),\n unit: z.string().optional().describe('Default measurement unit'),\n hardwareId: z.string().optional().describe('Physical hardware identifier'),\n installedAt: z.string().optional().describe('Installation timestamp (ISO-8601 DateTime)'),\n },\n },\n async ({ siteId, name, kind, status, unit, hardwareId, installedAt }) => {\n try {\n const input: Record<string, unknown> = { siteId, name };\n if (kind !== undefined) input.kind = kind;\n if (status !== undefined) input.status = status;\n if (unit !== undefined) input.unit = unit;\n if (hardwareId !== undefined) input.hardwareId = hardwareId;\n if (installedAt !== undefined) input.installedAt = installedAt;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateSensor: Record<string, unknown>;\n }>(ops.CREATE_SENSOR, { input });\n return jsonResult(data.ecoCreateSensor);\n } catch (error) {\n ctx.logger.error('ecoimpacthub sensors_create failed', { error: String(error) });\n return errorResult(\n `Failed to create sensor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'sensors_set_status')),\n {\n title: 'Set Sensor Status',\n description:\n \"Update a sensor's operational status (e.g. flag it OFFLINE / MAINTENANCE / DEGRADED).\",\n inputSchema: {\n id: z.string().describe('Sensor ID'),\n status: SensorStatusEnum.describe('New operational status'),\n },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoSetSensorStatus: Record<string, unknown>;\n }>(ops.SET_SENSOR_STATUS, { id, status });\n return jsonResult(data.ecoSetSensorStatus);\n } catch (error) {\n ctx.logger.error('ecoimpacthub sensors_set_status failed', { error: String(error) });\n return errorResult(\n `Failed to set sensor status: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub alert-threshold tools — per-site/parameter breach rules.\n *\n * Surface (3): thresholds_{list,create,set_active}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { ThresholdDirectionEnum, ThresholdSeverityEnum } from './shared.js';\n\nexport function registerThresholdTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'thresholds_list')),\n {\n title: 'List Alert Thresholds',\n description: 'List alert thresholds, optionally filtered by site.',\n inputSchema: {\n siteId: z.string().optional().describe('Filter by site ID'),\n },\n },\n async ({ siteId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListThresholds: Array<Record<string, unknown>>;\n }>(ops.LIST_THRESHOLDS, { siteId });\n return jsonResult(data.ecoListThresholds);\n } catch (error) {\n ctx.logger.error('ecoimpacthub thresholds_list failed', { error: String(error) });\n return errorResult(\n `Failed to list thresholds: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'thresholds_create')),\n {\n title: 'Create Alert Threshold',\n description:\n 'Create an alert threshold for a site + parameter. `direction` defaults to ABOVE and `severity` to WARNING. Provide min/max for OUTSIDE_RANGE or limitValue for ABOVE/BELOW.',\n inputSchema: {\n siteId: z.string().min(1).describe('Owning site ID'),\n parameter: z\n .string()\n .min(1)\n .describe('Monitored parameter (e.g. \"pm2_5\", \"ph\", \"turbidity\")'),\n unit: z.string().min(1).describe('Unit of the threshold value'),\n direction: ThresholdDirectionEnum.optional().describe('Breach direction (default ABOVE)'),\n severity: ThresholdSeverityEnum.optional().describe('Alert severity (default WARNING)'),\n limitValue: z.number().optional().describe('Single limit value (ABOVE/BELOW)'),\n minValue: z.number().optional().describe('Lower bound (OUTSIDE_RANGE)'),\n maxValue: z.number().optional().describe('Upper bound (OUTSIDE_RANGE)'),\n },\n },\n async ({ siteId, parameter, unit, direction, severity, limitValue, minValue, maxValue }) => {\n try {\n const input: Record<string, unknown> = { siteId, parameter, unit };\n if (direction !== undefined) input.direction = direction;\n if (severity !== undefined) input.severity = severity;\n if (limitValue !== undefined) input.limitValue = limitValue;\n if (minValue !== undefined) input.minValue = minValue;\n if (maxValue !== undefined) input.maxValue = maxValue;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateThreshold: Record<string, unknown>;\n }>(ops.CREATE_THRESHOLD, { input });\n return jsonResult(data.ecoCreateThreshold);\n } catch (error) {\n ctx.logger.error('ecoimpacthub thresholds_create failed', { error: String(error) });\n return errorResult(\n `Failed to create threshold: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'thresholds_set_active')),\n {\n title: 'Set Threshold Active',\n description: 'Enable or disable an alert threshold.',\n inputSchema: {\n id: z.string().describe('Threshold ID'),\n isActive: z.boolean().describe('Whether the threshold should be active'),\n },\n },\n async ({ id, isActive }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoSetThresholdActive: Record<string, unknown>;\n }>(ops.SET_THRESHOLD_ACTIVE, { id, isActive });\n return jsonResult(data.ecoSetThresholdActive);\n } catch (error) {\n ctx.logger.error('ecoimpacthub thresholds_set_active failed', { error: String(error) });\n return errorResult(\n `Failed to set threshold active state: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub measurement tools — telemetry readings + breach evaluation.\n *\n * Surface (2): measurements_list, measurements_record.\n * `measurements_record` evaluates the value against active thresholds for the\n * site + parameter and flags a breach when it drifts out of range.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { MeasurementSourceEnum, buildPagination, paginationInputShape } from './shared.js';\n\nexport function registerMeasurementTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'measurements_list')),\n {\n title: 'List Measurements',\n description:\n 'List telemetry measurements with optional site/sensor/parameter filters, a breaches-only flag, and cursor pagination.',\n inputSchema: {\n siteId: z.string().optional().describe('Filter by site ID'),\n sensorId: z.string().optional().describe('Filter by sensor ID'),\n parameter: z.string().optional().describe('Filter by measured parameter'),\n breachesOnly: z\n .boolean()\n .optional()\n .describe('Only return measurements flagged as breaches'),\n ...paginationInputShape,\n },\n },\n async ({ siteId, sensorId, parameter, breachesOnly, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListMeasurements: {\n items: Array<Record<string, unknown>>;\n pageInfo: Record<string, unknown>;\n };\n }>(ops.LIST_MEASUREMENTS, {\n siteId,\n sensorId,\n parameter,\n breachesOnly,\n pagination: buildPagination({ limit, offset, cursor }),\n });\n return jsonResult(data.ecoListMeasurements);\n } catch (error) {\n ctx.logger.error('ecoimpacthub measurements_list failed', { error: String(error) });\n return errorResult(\n `Failed to list measurements: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'measurements_record')),\n {\n title: 'Record Measurement',\n description:\n 'Record a measurement for a site + parameter; the value is evaluated against active thresholds and flagged as a breach when out of range. `source` defaults to SENSOR.',\n inputSchema: {\n siteId: z.string().min(1).describe('Site the measurement belongs to'),\n parameter: z.string().min(1).describe('Measured parameter (e.g. \"pm2_5\", \"ph\")'),\n value: z.number().describe('Measured value'),\n unit: z.string().min(1).describe('Unit of the value'),\n recordedAt: z.string().describe('When the measurement was taken (ISO-8601 DateTime)'),\n source: MeasurementSourceEnum.optional().describe('Provenance (default SENSOR)'),\n sensorId: z.string().optional().describe('Source sensor ID (if from a sensor)'),\n notes: z.string().optional().describe('Free-text notes'),\n },\n },\n async ({ siteId, parameter, value, unit, recordedAt, source, sensorId, notes }) => {\n try {\n const input: Record<string, unknown> = { siteId, parameter, value, unit, recordedAt };\n if (source !== undefined) input.source = source;\n if (sensorId !== undefined) input.sensorId = sensorId;\n if (notes !== undefined) input.notes = notes;\n\n const data = await ctx.gql.workspace.request<{\n ecoRecordMeasurement: Record<string, unknown>;\n }>(ops.RECORD_MEASUREMENT, { input });\n return jsonResult(data.ecoRecordMeasurement);\n } catch (error) {\n ctx.logger.error('ecoimpacthub measurements_record failed', { error: String(error) });\n return errorResult(\n `Failed to record measurement: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub species tools — biodiversity catalog CRUD.\n *\n * Surface (5): species_{get,list,create,update,archive}.\n * `species_get` (ecoSpecies) returns the species with its recent observations;\n * `species_list` (ecoListSpecies) is connection-paginated.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n TaxonGroupEnum,\n ConservationStatusEnum,\n buildPagination,\n paginationInputShape,\n} from './shared.js';\n\nexport function registerSpeciesTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'species_get')),\n {\n title: 'Get Species',\n description: 'Fetch a single catalogued species by ID, including its observations.',\n inputSchema: { id: z.string().describe('Species ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoSpecies: Record<string, unknown> | null;\n }>(ops.GET_SPECIES, { id });\n if (!data.ecoSpecies) return errorResult(`Species ${id} not found`);\n return jsonResult(data.ecoSpecies);\n } catch (error) {\n ctx.logger.error('ecoimpacthub species_get failed', { error: String(error) });\n return errorResult(\n `Failed to get species: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'species_list')),\n {\n title: 'List Species',\n description:\n 'List catalogued species with optional taxon-group/conservation-status/priority filters and cursor pagination.',\n inputSchema: {\n taxonGroup: TaxonGroupEnum.optional().describe('Filter by taxonomic group'),\n conservationStatus: ConservationStatusEnum.optional().describe(\n 'Filter by conservation status',\n ),\n priorityOnly: z.boolean().optional().describe('Only priority species'),\n ...paginationInputShape,\n },\n },\n async ({ taxonGroup, conservationStatus, priorityOnly, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListSpecies: {\n items: Array<Record<string, unknown>>;\n pageInfo: Record<string, unknown>;\n };\n }>(ops.LIST_SPECIES, {\n taxonGroup,\n conservationStatus,\n priorityOnly,\n pagination: buildPagination({ limit, offset, cursor }),\n });\n return jsonResult(data.ecoListSpecies);\n } catch (error) {\n ctx.logger.error('ecoimpacthub species_list failed', { error: String(error) });\n return errorResult(\n `Failed to list species: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'species_create')),\n {\n title: 'Create Species',\n description:\n 'Add a species to the biodiversity catalog. `taxonGroup` defaults to OTHER and `conservationStatus` to NOT_EVALUATED.',\n inputSchema: {\n commonName: z.string().min(1).describe('Common (vernacular) name'),\n scientificName: z.string().optional().describe('Binomial scientific name'),\n taxonGroup: TaxonGroupEnum.optional().describe('Taxonomic group (default OTHER)'),\n conservationStatus: ConservationStatusEnum.optional().describe(\n 'Conservation status (default NOT_EVALUATED)',\n ),\n isPriority: z.boolean().optional().describe('Flag as a priority species (default false)'),\n description: z.string().optional().describe('Species description / notes'),\n },\n },\n async ({\n commonName,\n scientificName,\n taxonGroup,\n conservationStatus,\n isPriority,\n description,\n }) => {\n try {\n const input: Record<string, unknown> = { commonName };\n if (scientificName !== undefined) input.scientificName = scientificName;\n if (taxonGroup !== undefined) input.taxonGroup = taxonGroup;\n if (conservationStatus !== undefined) input.conservationStatus = conservationStatus;\n if (isPriority !== undefined) input.isPriority = isPriority;\n if (description !== undefined) input.description = description;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateSpecies: Record<string, unknown>;\n }>(ops.CREATE_SPECIES, { input });\n return jsonResult(data.ecoCreateSpecies);\n } catch (error) {\n ctx.logger.error('ecoimpacthub species_create failed', { error: String(error) });\n return errorResult(\n `Failed to create species: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'species_update')),\n {\n title: 'Update Species',\n description: 'Update a catalogued species. At least one mutable field must be provided.',\n inputSchema: {\n id: z.string().describe('Species ID'),\n commonName: z.string().optional().describe('Updated common name'),\n scientificName: z.string().optional().describe('Updated scientific name'),\n taxonGroup: TaxonGroupEnum.optional().describe('Updated taxonomic group'),\n conservationStatus: ConservationStatusEnum.optional().describe(\n 'Updated conservation status',\n ),\n isPriority: z.boolean().optional().describe('Updated priority flag'),\n description: z.string().optional().describe('Updated description'),\n },\n },\n async ({\n id,\n commonName,\n scientificName,\n taxonGroup,\n conservationStatus,\n isPriority,\n description,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (commonName !== undefined) input.commonName = commonName;\n if (scientificName !== undefined) input.scientificName = scientificName;\n if (taxonGroup !== undefined) input.taxonGroup = taxonGroup;\n if (conservationStatus !== undefined) input.conservationStatus = conservationStatus;\n if (isPriority !== undefined) input.isPriority = isPriority;\n if (description !== undefined) input.description = description;\n\n if (Object.keys(input).length === 0) {\n return errorResult('No updates specified — provide at least one mutable species field');\n }\n\n const data = await ctx.gql.workspace.request<{\n ecoUpdateSpecies: Record<string, unknown>;\n }>(ops.UPDATE_SPECIES, { id, input });\n return jsonResult(data.ecoUpdateSpecies);\n } catch (error) {\n ctx.logger.error('ecoimpacthub species_update failed', { error: String(error) });\n return errorResult(\n `Failed to update species: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'species_archive')),\n {\n title: 'Archive Species',\n description: 'Archive a species (soft delete). Returns true on success.',\n inputSchema: { id: z.string().describe('Species ID') },\n annotations: { destructiveHint: true },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ ecoArchiveSpecies: boolean }>(\n ops.ARCHIVE_SPECIES,\n { id },\n );\n return jsonResult({ ok: data.ecoArchiveSpecies, id });\n } catch (error) {\n ctx.logger.error('ecoimpacthub species_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive species: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub observation tools — species sightings + field evidence.\n *\n * Surface (2): observations_list, observations_record.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { ObservationMethodEnum, buildPagination, paginationInputShape } from './shared.js';\n\nexport function registerObservationTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'observations_list')),\n {\n title: 'List Observations',\n description:\n 'List species observations with optional species/site filters and cursor pagination.',\n inputSchema: {\n speciesId: z.string().optional().describe('Filter by species ID'),\n siteId: z.string().optional().describe('Filter by site ID'),\n ...paginationInputShape,\n },\n },\n async ({ speciesId, siteId, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListObservations: {\n items: Array<Record<string, unknown>>;\n pageInfo: Record<string, unknown>;\n };\n }>(ops.LIST_OBSERVATIONS, {\n speciesId,\n siteId,\n pagination: buildPagination({ limit, offset, cursor }),\n });\n return jsonResult(data.ecoListObservations);\n } catch (error) {\n ctx.logger.error('ecoimpacthub observations_list failed', { error: String(error) });\n return errorResult(\n `Failed to list observations: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'observations_record')),\n {\n title: 'Record Observation',\n description:\n 'Record a species observation. `count` defaults to 1 and `method` to DIRECT_SIGHTING. Attach a wspace-files File via `evidenceFileId` for photo/audio evidence.',\n inputSchema: {\n speciesId: z.string().min(1).describe('Observed species ID'),\n observedAt: z.string().describe('When the observation was made (ISO-8601 DateTime)'),\n siteId: z.string().optional().describe('Site where it was observed'),\n method: ObservationMethodEnum.optional().describe(\n 'Observation method (default DIRECT_SIGHTING)',\n ),\n count: z.number().int().optional().describe('Number of individuals (default 1)'),\n latitude: z.number().optional().describe('Latitude (decimal degrees)'),\n longitude: z.number().optional().describe('Longitude (decimal degrees)'),\n evidenceFileId: z\n .string()\n .optional()\n .describe('wspace-files File ID for photo/audio evidence'),\n notes: z.string().optional().describe('Free-text notes'),\n },\n },\n async ({\n speciesId,\n observedAt,\n siteId,\n method,\n count,\n latitude,\n longitude,\n evidenceFileId,\n notes,\n }) => {\n try {\n const input: Record<string, unknown> = { speciesId, observedAt };\n if (siteId !== undefined) input.siteId = siteId;\n if (method !== undefined) input.method = method;\n if (count !== undefined) input.count = count;\n if (latitude !== undefined) input.latitude = latitude;\n if (longitude !== undefined) input.longitude = longitude;\n if (evidenceFileId !== undefined) input.evidenceFileId = evidenceFileId;\n if (notes !== undefined) input.notes = notes;\n\n const data = await ctx.gql.workspace.request<{\n ecoRecordObservation: Record<string, unknown>;\n }>(ops.RECORD_OBSERVATION, { input });\n return jsonResult(data.ecoRecordObservation);\n } catch (error) {\n ctx.logger.error('ecoimpacthub observations_record failed', { error: String(error) });\n return errorResult(\n `Failed to record observation: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub habitat-restoration tools — projects + logged activities.\n *\n * Surface (5): habitat_projects_{get,list,create,transition},\n * habitat_projects_log_activity.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { HabitatProjectStatusEnum, RestorationActivityTypeEnum } from './shared.js';\n\nexport function registerHabitatTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'habitat_projects_get')),\n {\n title: 'Get Habitat Project',\n description:\n 'Fetch a single habitat restoration project by ID, including its logged restoration activities.',\n inputSchema: { id: z.string().describe('Habitat project ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoHabitatProject: Record<string, unknown> | null;\n }>(ops.GET_HABITAT_PROJECT, { id });\n if (!data.ecoHabitatProject) return errorResult(`Habitat project ${id} not found`);\n return jsonResult(data.ecoHabitatProject);\n } catch (error) {\n ctx.logger.error('ecoimpacthub habitat_projects_get failed', { error: String(error) });\n return errorResult(\n `Failed to get habitat project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'habitat_projects_list')),\n {\n title: 'List Habitat Projects',\n description: 'List habitat restoration projects, optionally filtered by status.',\n inputSchema: {\n status: HabitatProjectStatusEnum.optional().describe('Filter by project status'),\n },\n },\n async ({ status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListHabitatProjects: Array<Record<string, unknown>>;\n }>(ops.LIST_HABITAT_PROJECTS, { status });\n return jsonResult(data.ecoListHabitatProjects);\n } catch (error) {\n ctx.logger.error('ecoimpacthub habitat_projects_list failed', { error: String(error) });\n return errorResult(\n `Failed to list habitat projects: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'habitat_projects_create')),\n {\n title: 'Create Habitat Project',\n description: 'Create a habitat restoration project (target area, budget, timeline, manager).',\n inputSchema: {\n name: z.string().min(1).describe('Project name'),\n description: z.string().optional().describe('Project description'),\n siteId: z.string().optional().describe('Associated site ID'),\n managerId: z.string().optional().describe('Project manager user ID'),\n targetHectares: z.number().optional().describe('Target restoration area in hectares'),\n budgetAmount: z.number().optional().describe('Budget amount'),\n currency: z.string().optional().describe('Budget currency code'),\n startDate: z.string().optional().describe('Planned start (ISO-8601 DateTime)'),\n endDate: z.string().optional().describe('Planned end (ISO-8601 DateTime)'),\n },\n },\n async ({\n name,\n description,\n siteId,\n managerId,\n targetHectares,\n budgetAmount,\n currency,\n startDate,\n endDate,\n }) => {\n try {\n const input: Record<string, unknown> = { name };\n if (description !== undefined) input.description = description;\n if (siteId !== undefined) input.siteId = siteId;\n if (managerId !== undefined) input.managerId = managerId;\n if (targetHectares !== undefined) input.targetHectares = targetHectares;\n if (budgetAmount !== undefined) input.budgetAmount = budgetAmount;\n if (currency !== undefined) input.currency = currency;\n if (startDate !== undefined) input.startDate = startDate;\n if (endDate !== undefined) input.endDate = endDate;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateHabitatProject: Record<string, unknown>;\n }>(ops.CREATE_HABITAT_PROJECT, { input });\n return jsonResult(data.ecoCreateHabitatProject);\n } catch (error) {\n ctx.logger.error('ecoimpacthub habitat_projects_create failed', { error: String(error) });\n return errorResult(\n `Failed to create habitat project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'habitat_projects_transition')),\n {\n title: 'Transition Habitat Project',\n description:\n 'Advance a habitat project through its lifecycle (validated transitions, e.g. PLANNED → IN_PROGRESS → MONITORING → COMPLETED, or ON_HOLD / CANCELLED).',\n inputSchema: {\n id: z.string().describe('Habitat project ID'),\n status: HabitatProjectStatusEnum.describe('Target lifecycle status'),\n },\n annotations: { destructiveHint: true },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoTransitionHabitatProject: Record<string, unknown>;\n }>(ops.TRANSITION_HABITAT_PROJECT, { id, status });\n return jsonResult(data.ecoTransitionHabitatProject);\n } catch (error) {\n ctx.logger.error('ecoimpacthub habitat_projects_transition failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to transition habitat project: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'habitat_projects_log_activity')),\n {\n title: 'Log Restoration Activity',\n description:\n 'Log a restoration activity against a habitat project (planting, invasive removal, survey, etc.). `type` defaults to PLANTING.',\n inputSchema: {\n projectId: z.string().min(1).describe('Owning habitat project ID'),\n summary: z.string().min(1).describe('Short activity summary'),\n performedAt: z.string().describe('When the activity was performed (ISO-8601 DateTime)'),\n type: RestorationActivityTypeEnum.optional().describe('Activity type (default PLANTING)'),\n quantity: z\n .number()\n .optional()\n .describe('Quantity (e.g. seedlings planted, hectares cleared)'),\n unit: z.string().optional().describe('Unit of the quantity'),\n details: z.string().optional().describe('Detailed notes'),\n },\n },\n async ({ projectId, summary, performedAt, type, quantity, unit, details }) => {\n try {\n const input: Record<string, unknown> = { projectId, summary, performedAt };\n if (type !== undefined) input.type = type;\n if (quantity !== undefined) input.quantity = quantity;\n if (unit !== undefined) input.unit = unit;\n if (details !== undefined) input.details = details;\n\n const data = await ctx.gql.workspace.request<{\n ecoLogRestorationActivity: Record<string, unknown>;\n }>(ops.LOG_RESTORATION_ACTIVITY, { input });\n return jsonResult(data.ecoLogRestorationActivity);\n } catch (error) {\n ctx.logger.error('ecoimpacthub habitat_projects_log_activity failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to log restoration activity: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub carbon-ledger tools — emission entries + workspace totals.\n *\n * Surface (4): carbon_{list_entries,record_entry,verify_entry,total_kg}.\n * `carbon_entries_record` computes CO2e from the activity value and the\n * referenced emission factor (when one is provided).\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n EmissionScopeEnum,\n CarbonEntryStatusEnum,\n buildPagination,\n paginationInputShape,\n} from './shared.js';\n\nexport function registerCarbonTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'carbon_list_entries')),\n {\n title: 'List Carbon Entries',\n description:\n 'List carbon-ledger entries with optional scope/site/status filters and cursor pagination.',\n inputSchema: {\n scope: EmissionScopeEnum.optional().describe('Filter by emission scope'),\n siteId: z.string().optional().describe('Filter by site ID'),\n status: CarbonEntryStatusEnum.optional().describe('Filter by entry status'),\n ...paginationInputShape,\n },\n },\n async ({ scope, siteId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListCarbonEntries: {\n items: Array<Record<string, unknown>>;\n pageInfo: Record<string, unknown>;\n };\n }>(ops.LIST_CARBON_ENTRIES, {\n scope,\n siteId,\n status,\n pagination: buildPagination({ limit, offset, cursor }),\n });\n return jsonResult(data.ecoListCarbonEntries);\n } catch (error) {\n ctx.logger.error('ecoimpacthub carbon_list_entries failed', { error: String(error) });\n return errorResult(\n `Failed to list carbon entries: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'carbon_total_kg')),\n {\n title: 'Carbon Total (kg CO2e)',\n description:\n 'Total CO2e (kg) recorded in the workspace, optionally narrowed by emission scope and/or site.',\n inputSchema: {\n scope: EmissionScopeEnum.optional().describe('Narrow the total to a single emission scope'),\n siteId: z.string().optional().describe('Narrow the total to a single site'),\n },\n },\n async ({ scope, siteId }) => {\n try {\n const data = await ctx.gql.workspace.request<{ ecoCarbonTotalKg: number }>(\n ops.CARBON_TOTAL_KG,\n { scope, siteId },\n );\n return jsonResult({\n totalKgCo2e: data.ecoCarbonTotalKg,\n scope: scope ?? null,\n siteId: siteId ?? null,\n });\n } catch (error) {\n ctx.logger.error('ecoimpacthub carbon_total failed', { error: String(error) });\n return errorResult(\n `Failed to get carbon total: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'carbon_record_entry')),\n {\n title: 'Record Carbon Entry',\n description:\n 'Record a carbon-ledger entry; CO2e is computed from the activity value and the referenced emission factor (when one is provided). `scope` defaults to SCOPE_1.',\n inputSchema: {\n category: z\n .string()\n .min(1)\n .describe('Activity category (e.g. \"electricity\", \"fleet-diesel\")'),\n activityValue: z.number().describe('Activity quantity (e.g. kWh, litres)'),\n activityUnit: z.string().min(1).describe('Unit of the activity value'),\n periodStart: z.string().describe('Start of the activity period (ISO-8601 DateTime)'),\n scope: EmissionScopeEnum.optional().describe('Emission scope (default SCOPE_1)'),\n factorId: z.string().optional().describe('Emission factor ID used to compute CO2e'),\n siteId: z.string().optional().describe('Associated site ID'),\n notes: z.string().optional().describe('Free-text notes'),\n },\n },\n async ({\n category,\n activityValue,\n activityUnit,\n periodStart,\n scope,\n factorId,\n siteId,\n notes,\n }) => {\n try {\n const input: Record<string, unknown> = {\n category,\n activityValue,\n activityUnit,\n periodStart,\n };\n if (scope !== undefined) input.scope = scope;\n if (factorId !== undefined) input.factorId = factorId;\n if (siteId !== undefined) input.siteId = siteId;\n if (notes !== undefined) input.notes = notes;\n\n const data = await ctx.gql.workspace.request<{\n ecoRecordCarbonEntry: Record<string, unknown>;\n }>(ops.RECORD_CARBON_ENTRY, { input });\n return jsonResult(data.ecoRecordCarbonEntry);\n } catch (error) {\n ctx.logger.error('ecoimpacthub carbon_record_entry failed', { error: String(error) });\n return errorResult(\n `Failed to record carbon entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'carbon_verify_entry')),\n {\n title: 'Verify Carbon Entry',\n description: 'Mark a carbon-ledger entry as VERIFIED.',\n inputSchema: { id: z.string().describe('Carbon entry ID') },\n annotations: { destructiveHint: true },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoVerifyCarbonEntry: Record<string, unknown>;\n }>(ops.VERIFY_CARBON_ENTRY, { id });\n return jsonResult(data.ecoVerifyCarbonEntry);\n } catch (error) {\n ctx.logger.error('ecoimpacthub carbon_verify_entry failed', { error: String(error) });\n return errorResult(\n `Failed to verify carbon entry: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub emission-factor tools — CO2e conversion factor library.\n *\n * Surface (2): emission_factors_list, emission_factors_create.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { EmissionScopeEnum } from './shared.js';\n\nexport function registerEmissionFactorTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'emission_factors_list')),\n {\n title: 'List Emission Factors',\n description:\n 'List emission factors, optionally filtered by scope and/or limited to active factors.',\n inputSchema: {\n scope: EmissionScopeEnum.optional().describe('Filter by emission scope'),\n activeOnly: z.boolean().optional().describe('Only return active factors'),\n },\n },\n async ({ scope, activeOnly }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListEmissionFactors: Array<Record<string, unknown>>;\n }>(ops.LIST_EMISSION_FACTORS, { scope, activeOnly });\n return jsonResult(data.ecoListEmissionFactors);\n } catch (error) {\n ctx.logger.error('ecoimpacthub emission_factors_list failed', { error: String(error) });\n return errorResult(\n `Failed to list emission factors: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'emission_factors_create')),\n {\n title: 'Create Emission Factor',\n description:\n 'Create an emission factor (kg CO2e per activity unit) for use in carbon-entry calculations. `scope` defaults to SCOPE_1.',\n inputSchema: {\n name: z.string().min(1).describe('Factor name (e.g. \"Grid electricity – IN\")'),\n activityUnit: z\n .string()\n .min(1)\n .describe('Activity unit the factor applies to (e.g. \"kWh\")'),\n factorKgco2e: z.number().describe('Kilograms CO2e per activity unit'),\n scope: EmissionScopeEnum.optional().describe('Emission scope (default SCOPE_1)'),\n source: z.string().optional().describe('Citation / source of the factor'),\n validYear: z.number().int().optional().describe('Year the factor is valid for'),\n },\n },\n async ({ name, activityUnit, factorKgco2e, scope, source, validYear }) => {\n try {\n const input: Record<string, unknown> = { name, activityUnit, factorKgco2e };\n if (scope !== undefined) input.scope = scope;\n if (source !== undefined) input.source = source;\n if (validYear !== undefined) input.validYear = validYear;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateEmissionFactor: Record<string, unknown>;\n }>(ops.CREATE_EMISSION_FACTOR, { input });\n return jsonResult(data.ecoCreateEmissionFactor);\n } catch (error) {\n ctx.logger.error('ecoimpacthub emission_factors_create failed', { error: String(error) });\n return errorResult(\n `Failed to create emission factor: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub reduction-target tools — emissions/impact reduction goals.\n *\n * Surface (3): reduction_targets_{list,create,set_status}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { ReductionTargetStatusEnum } from './shared.js';\n\nexport function registerTargetTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reduction_targets_list')),\n {\n title: 'List Reduction Targets',\n description: 'List emissions/impact reduction targets, optionally filtered by status.',\n inputSchema: {\n status: ReductionTargetStatusEnum.optional().describe('Filter by target status'),\n },\n },\n async ({ status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListReductionTargets: Array<Record<string, unknown>>;\n }>(ops.LIST_REDUCTION_TARGETS, { status });\n return jsonResult(data.ecoListReductionTargets);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reduction_targets_list failed', { error: String(error) });\n return errorResult(\n `Failed to list reduction targets: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reduction_targets_create')),\n {\n title: 'Create Reduction Target',\n description:\n 'Create an emissions/impact reduction target (baseline → target over a metric, with baseline + target years).',\n inputSchema: {\n name: z.string().min(1).describe('Target name'),\n metric: z.string().min(1).describe('Metric being reduced (e.g. \"Scope 1+2 CO2e\")'),\n baselineValue: z.number().describe('Baseline metric value'),\n baselineYear: z.number().int().describe('Baseline year'),\n targetValue: z.number().describe('Target metric value'),\n targetYear: z.number().int().describe('Target year'),\n unit: z.string().min(1).describe('Unit of the metric values'),\n description: z.string().optional().describe('Target description'),\n },\n },\n async ({\n name,\n metric,\n baselineValue,\n baselineYear,\n targetValue,\n targetYear,\n unit,\n description,\n }) => {\n try {\n const input: Record<string, unknown> = {\n name,\n metric,\n baselineValue,\n baselineYear,\n targetValue,\n targetYear,\n unit,\n };\n if (description !== undefined) input.description = description;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateReductionTarget: Record<string, unknown>;\n }>(ops.CREATE_REDUCTION_TARGET, { input });\n return jsonResult(data.ecoCreateReductionTarget);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reduction_targets_create failed', { error: String(error) });\n return errorResult(\n `Failed to create reduction target: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reduction_targets_set_status')),\n {\n title: 'Set Reduction Target Status',\n description:\n 'Update the status of a reduction target (e.g. PROPOSED → ACTIVE → ACHIEVED / MISSED / RETIRED).',\n inputSchema: {\n id: z.string().describe('Reduction target ID'),\n status: ReductionTargetStatusEnum.describe('New target status'),\n },\n annotations: { destructiveHint: true },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoSetReductionTargetStatus: Record<string, unknown>;\n }>(ops.SET_REDUCTION_TARGET_STATUS, { id, status });\n return jsonResult(data.ecoSetReductionTargetStatus);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reduction_targets_set_status failed', {\n error: String(error),\n });\n return errorResult(\n `Failed to set reduction target status: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub sustainability-report tools — disclosure reports + line items.\n *\n * Surface (5): reports_{get,list,create,add_line_item,publish}.\n * `reports_get` (ecoReport) returns the report with its line items;\n * `reports_list` (ecoListReports) is connection-paginated.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport {\n ReportFrameworkEnum,\n ReportStatusEnum,\n buildPagination,\n paginationInputShape,\n} from './shared.js';\n\nexport function registerReportTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reports_get')),\n {\n title: 'Get Report',\n description: 'Fetch a single sustainability report by ID, including its line items.',\n inputSchema: { id: z.string().describe('Report ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoReport: Record<string, unknown> | null;\n }>(ops.GET_REPORT, { id });\n if (!data.ecoReport) return errorResult(`Report ${id} not found`);\n return jsonResult(data.ecoReport);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reports_get failed', { error: String(error) });\n return errorResult(\n `Failed to get report: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reports_list')),\n {\n title: 'List Reports',\n description:\n 'List sustainability reports, optionally filtered by status, with cursor pagination.',\n inputSchema: {\n status: ReportStatusEnum.optional().describe('Filter by report status'),\n ...paginationInputShape,\n },\n },\n async ({ status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoListReports: {\n items: Array<Record<string, unknown>>;\n pageInfo: Record<string, unknown>;\n };\n }>(ops.LIST_REPORTS, {\n status,\n pagination: buildPagination({ limit, offset, cursor }),\n });\n return jsonResult(data.ecoListReports);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reports_list failed', { error: String(error) });\n return errorResult(\n `Failed to list reports: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reports_create')),\n {\n title: 'Create Report',\n description:\n 'Create a sustainability report for a reporting period. `framework` defaults to GHG_PROTOCOL.',\n inputSchema: {\n title: z.string().min(1).describe('Report title'),\n periodStart: z.string().describe('Reporting period start (ISO-8601 DateTime)'),\n periodEnd: z.string().describe('Reporting period end (ISO-8601 DateTime)'),\n framework: ReportFrameworkEnum.optional().describe(\n 'Reporting framework (default GHG_PROTOCOL)',\n ),\n summary: z.string().optional().describe('Report summary'),\n },\n },\n async ({ title, periodStart, periodEnd, framework, summary }) => {\n try {\n const input: Record<string, unknown> = { title, periodStart, periodEnd };\n if (framework !== undefined) input.framework = framework;\n if (summary !== undefined) input.summary = summary;\n\n const data = await ctx.gql.workspace.request<{\n ecoCreateReport: Record<string, unknown>;\n }>(ops.CREATE_REPORT, { input });\n return jsonResult(data.ecoCreateReport);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reports_create failed', { error: String(error) });\n return errorResult(\n `Failed to create report: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reports_add_line_item')),\n {\n title: 'Add Report Line Item',\n description:\n 'Add a line item to a sustainability report, optionally linked to a carbon-ledger entry.',\n inputSchema: {\n reportId: z.string().min(1).describe('Owning report ID'),\n label: z.string().min(1).describe('Line-item label'),\n value: z.number().describe('Line-item value'),\n unit: z.string().min(1).describe('Unit of the value'),\n category: z.string().optional().describe('Line-item category'),\n carbonEntryId: z.string().optional().describe('Linked carbon-entry ID'),\n },\n },\n async ({ reportId, label, value, unit, category, carbonEntryId }) => {\n try {\n const input: Record<string, unknown> = { reportId, label, value, unit };\n if (category !== undefined) input.category = category;\n if (carbonEntryId !== undefined) input.carbonEntryId = carbonEntryId;\n\n const data = await ctx.gql.workspace.request<{\n ecoAddReportLineItem: Record<string, unknown>;\n }>(ops.ADD_REPORT_LINE_ITEM, { input });\n return jsonResult(data.ecoAddReportLineItem);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reports_add_line_item failed', { error: String(error) });\n return errorResult(\n `Failed to add report line item: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'reports_publish')),\n {\n title: 'Publish Report',\n description:\n 'Publish a sustainability report, optionally attaching an exported wspace-files File as the published artifact.',\n inputSchema: {\n id: z.string().describe('Report ID'),\n fileId: z.string().optional().describe('wspace-files File ID of the exported artifact'),\n },\n annotations: { destructiveHint: true },\n },\n async ({ id, fileId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n ecoPublishReport: Record<string, unknown>;\n }>(ops.PUBLISH_REPORT, { id, fileId });\n return jsonResult(data.ecoPublishReport);\n } catch (error) {\n ctx.logger.error('ecoimpacthub reports_publish failed', { error: String(error) });\n return errorResult(\n `Failed to publish report: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * EcoImpactHub health tool.\n *\n * Surface (1): health — maps to the @public ecoHealth query (no auth required).\n */\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerHealthTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'health')),\n {\n title: 'EcoImpactHub Health Check',\n description:\n 'Public liveness/identity probe for the EcoImpactHub subgraph (ecoHealth). Requires no authentication.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{ ecoHealth: string }>(ops.HEALTH, {});\n return jsonResult({ ok: true, status: data.ecoHealth });\n } catch (error) {\n ctx.logger.error('ecoimpacthub health failed', { error: String(error) });\n return errorResult(\n `EcoImpactHub health check failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpResourceUri, type McpContext } from '../../core/index.js';\nimport { LIST_SITES, LIST_REDUCTION_TARGETS, CARBON_TOTAL_KG } from './operations.js';\n\n/**\n * Read-only EcoImpactHub MCP resources. URIs are product-prefixed via\n * mcpResourceUri so they don't collide when multiple MCP servers run side by\n * side. Each is tracked at function entry so the shell manifest reflects what\n * was registered even though registration is imperative.\n */\nexport function registerEcoimpacthubResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const sitesUri = track(mcpResourceUri(ctx.productName, 'sites'));\n const targetsUri = track(mcpResourceUri(ctx.productName, 'targets'));\n const carbonUri = track(mcpResourceUri(ctx.productName, 'carbon'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'ecoimpacthub-schema',\n schemaUri,\n {\n title: 'EcoImpactHub Domain Schema',\n description:\n 'Overview of the EcoImpactHub environmental-impact domain — entities, enums, and the per-entity tool surface.',\n mimeType: 'text/plain',\n },\n async () => {\n ctx.logger.debug(`Resource ${schemaUri} requested`);\n const schema = `# EcoImpactHub Domain (Overview)\n\nEnvironmental-impact, sustainability + biodiversity monitoring platform.\n\n## Entities\n- EcoSite — a monitored environmental site (sensors, thresholds)\n- EcoSensor — monitoring hardware attached to a site\n- EcoAlertThreshold — per-site/parameter breach rule\n- EcoMeasurement — a telemetry reading (auto breach-flagged)\n- EcoSpecies — biodiversity catalog entry (observations)\n- EcoObservation — a species sighting (+ optional file evidence)\n- EcoHabitatProject (+EcoRestorationActivity) — restoration project + activity log\n- EcoCarbonEntry — a carbon-ledger entry (CO2e)\n- EcoEmissionFactor — kg CO2e per activity unit\n- EcoReductionTarget — emissions/impact reduction goal\n- EcoReport (+EcoReportLineItem) — sustainability disclosure report\n\n## Enums\n- EcoSiteStatus: ACTIVE, ARCHIVED, MONITORING_PAUSED\n- EcoSiteType: AIRSHED, COASTAL, FACILITY, FARM, FOREST, OTHER, PROTECTED_AREA, WATERSHED, WETLAND\n- EcoSensorKind: ACOUSTIC, AIR_QUALITY, CAMERA_TRAP, ENERGY_METER, FLOW, MANUAL, SOIL, WATER_QUALITY, WEATHER\n- EcoSensorStatus: DEGRADED, MAINTENANCE, OFFLINE, ONLINE, RETIRED\n- EcoThresholdDirection: ABOVE, BELOW, OUTSIDE_RANGE | EcoThresholdSeverity: CRITICAL, INFO, WARNING\n- EcoMeasurementSource: CALCULATED, IMPORT, MANUAL, SATELLITE, SENSOR\n- EcoConservationStatus: CRITICALLY_ENDANGERED, DATA_DEFICIENT, ENDANGERED, EXTINCT_IN_WILD, LEAST_CONCERN, NEAR_THREATENED, NOT_EVALUATED, VULNERABLE\n- EcoTaxonGroup: AMPHIBIAN, BIRD, FISH, FUNGI, INSECT, MAMMAL, OTHER, PLANT, REPTILE\n- EcoObservationMethod: ACOUSTIC, CAMERA_TRAP, COMMUNITY_REPORT, DIRECT_SIGHTING, EDNA, TELEMETRY, TRACKS_SIGNS\n- EcoHabitatProjectStatus: CANCELLED, COMPLETED, IN_PROGRESS, MONITORING, ON_HOLD, PLANNED\n- EcoRestorationActivityType: COMMUNITY_ENGAGEMENT, INVASIVE_REMOVAL, PLANTING, REWILDING, SOIL_REMEDIATION, SURVEY, WATER_MANAGEMENT\n- EcoEmissionScope: SCOPE_1, SCOPE_2, SCOPE_3 | EcoCarbonEntryStatus: ADJUSTED, DRAFT, RECORDED, VERIFIED\n- EcoReductionTargetStatus: ACHIEVED, ACTIVE, MISSED, PROPOSED, RETIRED\n- EcoReportFramework: CDP, CUSTOM, GHG_PROTOCOL, GRI, SASB, TCFD | EcoReportStatus: ARCHIVED, DRAFT, IN_REVIEW, PUBLISHED\n\n## Tool groups\nsites, sensors, thresholds, measurements, species, observations, habitat,\ncarbon, emissions, targets, reports, health.\nAll run against the WORKSPACE gateway (workspace-scoped) except the public health probe.\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://sites — monitored site directory\n server.registerResource(\n 'ecoimpacthub-sites',\n sitesUri,\n {\n title: 'EcoImpactHub Site Directory',\n description: 'The first 50 monitored sites in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${sitesUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ ecoListSites: unknown }>(LIST_SITES, {\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: sitesUri,\n text: JSON.stringify(data.ecoListSites, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: sitesUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://targets — reduction targets\n server.registerResource(\n 'ecoimpacthub-targets',\n targetsUri,\n {\n title: 'EcoImpactHub Reduction Targets',\n description: 'All emissions/impact reduction targets in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${targetsUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ ecoListReductionTargets: unknown }>(\n LIST_REDUCTION_TARGETS,\n {},\n );\n return {\n contents: [\n {\n uri: targetsUri,\n text: JSON.stringify(data.ecoListReductionTargets, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: targetsUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://carbon — workspace CO2e total\n server.registerResource(\n 'ecoimpacthub-carbon',\n carbonUri,\n {\n title: 'EcoImpactHub Carbon Total',\n description: 'Total CO2e (kg) recorded across the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${carbonUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ ecoCarbonTotalKg: unknown }>(\n CARBON_TOTAL_KG,\n {},\n );\n return {\n contents: [\n {\n uri: carbonUri,\n text: JSON.stringify({ totalKgCo2e: data.ecoCarbonTotalKg }, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: carbonUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n}\n","import { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpPromptName, type McpContext } from '../../core/index.js';\n\n/**\n * EcoImpactHub MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerEcoimpacthubPrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const siteOnboardingName = track(mcpPromptName(p, 'site-onboarding'));\n const reportingName = track(mcpPromptName(p, 'sustainability-reporting'));\n\n // <product>-site-onboarding — stand up a monitored site\n server.registerPrompt(\n siteOnboardingName,\n {\n title: 'Site Monitoring Onboarding',\n description:\n 'Guide for standing up a monitored EcoImpactHub site end to end: create the site, attach sensors, define alert thresholds, and record a first measurement.',\n argsSchema: {\n name: z.string().optional().describe('Site name'),\n type: z.string().optional().describe('Site type'),\n },\n },\n ({ name, type }) => {\n ctx.logger.debug(`Prompt ${siteOnboardingName} called`, { name, type });\n const nameNote = name ? `Use the site name \"${name}\".` : 'Ask the user for the site name.';\n const typeNote = type ? `Use type ${type}.` : 'Help the user pick an EcoSiteType.';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me onboard a new EcoImpactHub monitored site.\n\n1. **Create Site**: Use ${p}_sites_create. ${nameNote} ${typeNote} Optionally set region/country and latitude/longitude.\n2. **Attach Sensors**: Use ${p}_sensors_create for each monitoring device — set siteId, name, kind (e.g. AIR_QUALITY, WATER_QUALITY), and unit.\n3. **Define Thresholds**: Use ${p}_thresholds_create per monitored parameter — set direction (ABOVE/BELOW/OUTSIDE_RANGE), severity, and limit/min/max values.\n4. **Record a Measurement**: Use ${p}_measurements_record to log a first reading; it is auto-evaluated against the active thresholds.\n5. **Verify**: Use ${p}_sites_get to confirm the site shows its sensors + thresholds, and ${p}_measurements_list with breachesOnly=true to spot any breaches.\n\nShow results at each step and confirm before moving on.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-sustainability-reporting — carbon ledger → disclosure report\n server.registerPrompt(\n reportingName,\n {\n title: 'Sustainability Reporting',\n description:\n 'Workflow for compiling a sustainability disclosure: review the carbon ledger and targets, draft a report, add line items, and publish.',\n argsSchema: {\n framework: z.string().optional().describe('Reporting framework (e.g. GHG_PROTOCOL, GRI)'),\n },\n },\n ({ framework }) => {\n ctx.logger.debug(`Prompt ${reportingName} called`, { framework });\n const frameworkNote = framework\n ? `Use the ${framework} framework.`\n : 'Help the user pick an EcoReportFramework (default GHG_PROTOCOL).';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Compile an EcoImpactHub sustainability report. ${frameworkNote}\n\n1. **Carbon Ledger**: Use ${p}_carbon_total for the headline CO2e and ${p}_carbon_entries_list to review entries by scope; verify any pending entries with ${p}_carbon_entries_verify.\n2. **Emission Factors**: Use ${p}_emission_factors_list to confirm the factors backing the entries are current.\n3. **Targets**: Use ${p}_targets_list to check progress against reduction targets.\n4. **Create Report**: Use ${p}_reports_create for the reporting period (periodStart/periodEnd, framework).\n5. **Line Items**: Use ${p}_reports_add_line_item for each disclosure figure, linking carbonEntryId where applicable.\n6. **Publish**: Once reviewed, use ${p}_reports_publish (optionally attaching an exported file).\n\nSummarize totals and any targets at risk after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * EcoImpactHub module — domain module for the future-products ecosystem program.\n *\n * Covers all 12 @key entities of wspace-ecoimpacthub-svc grouped into\n * per-entity sub-APIs: sites, sensors, thresholds, measurements, species,\n * observations, habitat (projects + restoration activities), carbon (ledger\n * entries + totals), emissions (factors), targets, reports, health. Mirrors the\n * rich kadaikodi module's structure (tools/<entity>.ts + resources.ts +\n * prompts.ts) and the canonical tags module's typing discipline.\n *\n * Backend: ~/products/wspace/ecoimpacthub/wspace-ecoimpacthub-svc/\n * (Hive service name `ecoimpacthub`). All operations run against the WORKSPACE\n * gateway; the @public ecoHealth probe is exposed as `<product>_health`.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerSiteTools } from './tools/sites.js';\nimport { registerSensorTools } from './tools/sensors.js';\nimport { registerThresholdTools } from './tools/thresholds.js';\nimport { registerMeasurementTools } from './tools/measurements.js';\nimport { registerSpeciesTools } from './tools/species.js';\nimport { registerObservationTools } from './tools/observations.js';\nimport { registerHabitatTools } from './tools/habitat.js';\nimport { registerCarbonTools } from './tools/carbon.js';\nimport { registerEmissionFactorTools } from './tools/emissions.js';\nimport { registerTargetTools } from './tools/targets.js';\nimport { registerReportTools } from './tools/reports.js';\nimport { registerHealthTools } from './tools/health.js';\nimport { registerEcoimpacthubResources } from './resources.js';\nimport { registerEcoimpacthubPrompts } from './prompts.js';\n\nconst ecoimpacthubModule: McpModule = {\n id: 'ecoimpacthub',\n version: '0.0.1',\n displayName: 'EcoImpactHub',\n dependsOn: ['auth'],\n capabilities: { tools: {}, resources: {}, prompts: {} },\n\n register(server: McpServer, ctx: McpContext): ModuleRegistration {\n const tools: string[] = [];\n const resources: string[] = [];\n const prompts: string[] = [];\n\n const trackTool = (n: string): string => {\n tools.push(n);\n return n;\n };\n const trackResource = (uri: string): string => {\n resources.push(uri);\n return uri;\n };\n const trackPrompt = (n: string): string => {\n prompts.push(n);\n return n;\n };\n\n registerSiteTools(server, ctx, trackTool);\n registerSensorTools(server, ctx, trackTool);\n registerThresholdTools(server, ctx, trackTool);\n registerMeasurementTools(server, ctx, trackTool);\n registerSpeciesTools(server, ctx, trackTool);\n registerObservationTools(server, ctx, trackTool);\n registerHabitatTools(server, ctx, trackTool);\n registerCarbonTools(server, ctx, trackTool);\n registerEmissionFactorTools(server, ctx, trackTool);\n registerTargetTools(server, ctx, trackTool);\n registerReportTools(server, ctx, trackTool);\n registerHealthTools(server, ctx, trackTool);\n\n registerEcoimpacthubResources(server, ctx, trackResource);\n registerEcoimpacthubPrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default ecoimpacthubModule;\n"]}