nepa-mcp 0.1.0__tar.gz

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.
Files changed (156) hide show
  1. nepa_mcp-0.1.0/.gitignore +53 -0
  2. nepa_mcp-0.1.0/CITATION.cff +26 -0
  3. nepa_mcp-0.1.0/CODE_OF_CONDUCT.md +171 -0
  4. nepa_mcp-0.1.0/CONTRIBUTING.md +137 -0
  5. nepa_mcp-0.1.0/LICENSE +28 -0
  6. nepa_mcp-0.1.0/MAINTAINERS.md +25 -0
  7. nepa_mcp-0.1.0/NOTICE +23 -0
  8. nepa_mcp-0.1.0/PKG-INFO +383 -0
  9. nepa_mcp-0.1.0/README.md +349 -0
  10. nepa_mcp-0.1.0/SECURITY.md +43 -0
  11. nepa_mcp-0.1.0/SUPPORT.md +50 -0
  12. nepa_mcp-0.1.0/blm/requirements.txt +15 -0
  13. nepa_mcp-0.1.0/blm/server.py +173 -0
  14. nepa_mcp-0.1.0/blm/src/__init__.py +0 -0
  15. nepa_mcp-0.1.0/blm/src/apis/__init__.py +1 -0
  16. nepa_mcp-0.1.0/blm/src/apis/blm_api.py +416 -0
  17. nepa_mcp-0.1.0/blm/src/core/__init__.py +1 -0
  18. nepa_mcp-0.1.0/blm/src/core/constants.py +26 -0
  19. nepa_mcp-0.1.0/census/requirements.txt +15 -0
  20. nepa_mcp-0.1.0/census/server.py +156 -0
  21. nepa_mcp-0.1.0/census/src/__init__.py +1 -0
  22. nepa_mcp-0.1.0/census/src/apis/__init__.py +1 -0
  23. nepa_mcp-0.1.0/census/src/apis/simplified_census_api.py +339 -0
  24. nepa_mcp-0.1.0/census/src/core/__init__.py +1 -0
  25. nepa_mcp-0.1.0/census/src/core/fips_utils.py +66 -0
  26. nepa_mcp-0.1.0/cfr/__init__.py +1 -0
  27. nepa_mcp-0.1.0/cfr/requirements.txt +20 -0
  28. nepa_mcp-0.1.0/cfr/server.py +1091 -0
  29. nepa_mcp-0.1.0/cfr/src/__init__.py +1 -0
  30. nepa_mcp-0.1.0/cfr/src/apis/__init__.py +1 -0
  31. nepa_mcp-0.1.0/cfr/src/apis/cfr_api.py +1652 -0
  32. nepa_mcp-0.1.0/cfr/src/apis/cfr_constants.py +69 -0
  33. nepa_mcp-0.1.0/efh/requirements.txt +16 -0
  34. nepa_mcp-0.1.0/efh/server.py +205 -0
  35. nepa_mcp-0.1.0/efh/src/__init__.py +0 -0
  36. nepa_mcp-0.1.0/efh/src/apis/__init__.py +0 -0
  37. nepa_mcp-0.1.0/efh/src/apis/efh_api.py +589 -0
  38. nepa_mcp-0.1.0/efh/src/core/__init__.py +0 -0
  39. nepa_mcp-0.1.0/efh/src/core/constants.py +22 -0
  40. nepa_mcp-0.1.0/epa_aqs/requirements.txt +15 -0
  41. nepa_mcp-0.1.0/epa_aqs/server.py +314 -0
  42. nepa_mcp-0.1.0/epa_aqs/src/__init__.py +0 -0
  43. nepa_mcp-0.1.0/epa_aqs/src/apis/__init__.py +1 -0
  44. nepa_mcp-0.1.0/epa_aqs/src/apis/aqs_api.py +651 -0
  45. nepa_mcp-0.1.0/epa_aqs/src/apis/aqs_constants.py +185 -0
  46. nepa_mcp-0.1.0/epa_aqs/src/core/__init__.py +1 -0
  47. nepa_mcp-0.1.0/esa_ranges/requirements.txt +16 -0
  48. nepa_mcp-0.1.0/esa_ranges/server.py +126 -0
  49. nepa_mcp-0.1.0/esa_ranges/src/__init__.py +0 -0
  50. nepa_mcp-0.1.0/esa_ranges/src/apis/__init__.py +0 -0
  51. nepa_mcp-0.1.0/esa_ranges/src/apis/esa_ranges_api.py +601 -0
  52. nepa_mcp-0.1.0/esa_ranges/src/core/__init__.py +0 -0
  53. nepa_mcp-0.1.0/esa_ranges/src/core/constants.py +15 -0
  54. nepa_mcp-0.1.0/fema_nfhl/requirements.txt +7 -0
  55. nepa_mcp-0.1.0/fema_nfhl/server.py +168 -0
  56. nepa_mcp-0.1.0/fema_nfhl/src/__init__.py +1 -0
  57. nepa_mcp-0.1.0/fema_nfhl/src/apis/__init__.py +1 -0
  58. nepa_mcp-0.1.0/fema_nfhl/src/apis/fema_nfhl_api.py +516 -0
  59. nepa_mcp-0.1.0/fema_nfhl/src/core/__init__.py +1 -0
  60. nepa_mcp-0.1.0/gbif/requirements.txt +7 -0
  61. nepa_mcp-0.1.0/gbif/server.py +181 -0
  62. nepa_mcp-0.1.0/gbif/src/__init__.py +0 -0
  63. nepa_mcp-0.1.0/gbif/src/apis/__init__.py +1 -0
  64. nepa_mcp-0.1.0/gbif/src/apis/counties_api.py +82 -0
  65. nepa_mcp-0.1.0/gbif/src/apis/gbif_api.py +769 -0
  66. nepa_mcp-0.1.0/gbif/src/core/__init__.py +1 -0
  67. nepa_mcp-0.1.0/gbif/src/core/fips_utils.py +126 -0
  68. nepa_mcp-0.1.0/gis/requirements.txt +7 -0
  69. nepa_mcp-0.1.0/gis/server.py +149 -0
  70. nepa_mcp-0.1.0/gis/src/__init__.py +1 -0
  71. nepa_mcp-0.1.0/gis/src/apis/__init__.py +1 -0
  72. nepa_mcp-0.1.0/gis/src/apis/roi_api.py +147 -0
  73. nepa_mcp-0.1.0/gis/src/core/__init__.py +1 -0
  74. nepa_mcp-0.1.0/ipac/requirements.txt +19 -0
  75. nepa_mcp-0.1.0/ipac/server.py +116 -0
  76. nepa_mcp-0.1.0/ipac/src/__init__.py +1 -0
  77. nepa_mcp-0.1.0/ipac/src/apis/__init__.py +4 -0
  78. nepa_mcp-0.1.0/ipac/src/apis/ipac_api.py +350 -0
  79. nepa_mcp-0.1.0/map_composer/__init__.py +1 -0
  80. nepa_mcp-0.1.0/map_composer/requirements.txt +6 -0
  81. nepa_mcp-0.1.0/map_composer/server.py +665 -0
  82. nepa_mcp-0.1.0/map_composer/src/__init__.py +1 -0
  83. nepa_mcp-0.1.0/map_composer/src/apis/__init__.py +1 -0
  84. nepa_mcp-0.1.0/map_composer/src/apis/counties_api.py +127 -0
  85. nepa_mcp-0.1.0/map_composer/src/apis/gbif_api.py +773 -0
  86. nepa_mcp-0.1.0/map_composer/src/core/__init__.py +1 -0
  87. nepa_mcp-0.1.0/map_composer/src/core/constants.py +135 -0
  88. nepa_mcp-0.1.0/map_composer/src/core/fips_utils.py +130 -0
  89. nepa_mcp-0.1.0/map_composer/src/core/geometry_collector.py +2580 -0
  90. nepa_mcp-0.1.0/map_composer/src/core/map_renderer.py +1040 -0
  91. nepa_mcp-0.1.0/nepa_assist/requirements.txt +19 -0
  92. nepa_mcp-0.1.0/nepa_assist/server.py +114 -0
  93. nepa_mcp-0.1.0/nepa_assist/src/__init__.py +1 -0
  94. nepa_mcp-0.1.0/nepa_assist/src/apis/__init__.py +1 -0
  95. nepa_mcp-0.1.0/nepa_assist/src/apis/nepa_assist_api.py +397 -0
  96. nepa_mcp-0.1.0/nepa_assist/src/core/__init__.py +1 -0
  97. nepa_mcp-0.1.0/nepa_mcp/__init__.py +10 -0
  98. nepa_mcp-0.1.0/nepa_mcp/__main__.py +5 -0
  99. nepa_mcp-0.1.0/nepa_mcp/aggregate.py +37 -0
  100. nepa_mcp-0.1.0/nepa_mcp/cli.py +133 -0
  101. nepa_mcp-0.1.0/nepa_mcp/clients.py +93 -0
  102. nepa_mcp-0.1.0/nepa_mcp/config.py +79 -0
  103. nepa_mcp-0.1.0/nepa_mcp/loader.py +41 -0
  104. nepa_mcp-0.1.0/nepa_mcp/registry.py +74 -0
  105. nepa_mcp-0.1.0/nepa_mcp_common/__init__.py +13 -0
  106. nepa_mcp-0.1.0/nepa_mcp_common/arcgis.py +341 -0
  107. nepa_mcp-0.1.0/nepa_mcp_common/http.py +52 -0
  108. nepa_mcp-0.1.0/nepa_mcp_common/spatial.py +438 -0
  109. nepa_mcp-0.1.0/nepa_mcp_common/validation.py +114 -0
  110. nepa_mcp-0.1.0/noaa/requirements.txt +16 -0
  111. nepa_mcp-0.1.0/noaa/server.py +127 -0
  112. nepa_mcp-0.1.0/noaa/src/__init__.py +0 -0
  113. nepa_mcp-0.1.0/noaa/src/apis/__init__.py +0 -0
  114. nepa_mcp-0.1.0/noaa/src/apis/noaa_api.py +354 -0
  115. nepa_mcp-0.1.0/noaa/src/core/__init__.py +0 -0
  116. nepa_mcp-0.1.0/noaa/src/core/constants.py +19 -0
  117. nepa_mcp-0.1.0/nrhp/requirements.txt +15 -0
  118. nepa_mcp-0.1.0/nrhp/server.py +121 -0
  119. nepa_mcp-0.1.0/nrhp/src/__init__.py +0 -0
  120. nepa_mcp-0.1.0/nrhp/src/apis/__init__.py +0 -0
  121. nepa_mcp-0.1.0/nrhp/src/apis/nrhp_api.py +227 -0
  122. nepa_mcp-0.1.0/nrhp/src/core/__init__.py +0 -0
  123. nepa_mcp-0.1.0/nrhp/src/core/constants.py +19 -0
  124. nepa_mcp-0.1.0/padus/requirements.txt +15 -0
  125. nepa_mcp-0.1.0/padus/server.py +115 -0
  126. nepa_mcp-0.1.0/padus/src/__init__.py +0 -0
  127. nepa_mcp-0.1.0/padus/src/apis/__init__.py +1 -0
  128. nepa_mcp-0.1.0/padus/src/apis/padus_api.py +154 -0
  129. nepa_mcp-0.1.0/padus/src/core/__init__.py +1 -0
  130. nepa_mcp-0.1.0/pcsrf/requirements.txt +16 -0
  131. nepa_mcp-0.1.0/pcsrf/server.py +197 -0
  132. nepa_mcp-0.1.0/pcsrf/src/__init__.py +0 -0
  133. nepa_mcp-0.1.0/pcsrf/src/apis/__init__.py +0 -0
  134. nepa_mcp-0.1.0/pcsrf/src/apis/pcsrf_api.py +712 -0
  135. nepa_mcp-0.1.0/pcsrf/src/core/__init__.py +0 -0
  136. nepa_mcp-0.1.0/pcsrf/src/core/constants.py +33 -0
  137. nepa_mcp-0.1.0/pyproject.toml +130 -0
  138. nepa_mcp-0.1.0/tigerweb_counties/requirements.txt +15 -0
  139. nepa_mcp-0.1.0/tigerweb_counties/server.py +112 -0
  140. nepa_mcp-0.1.0/tigerweb_counties/src/__init__.py +0 -0
  141. nepa_mcp-0.1.0/tigerweb_counties/src/apis/__init__.py +1 -0
  142. nepa_mcp-0.1.0/tigerweb_counties/src/apis/counties_api.py +122 -0
  143. nepa_mcp-0.1.0/tigerweb_counties/src/core/__init__.py +1 -0
  144. nepa_mcp-0.1.0/tribal/requirements.txt +15 -0
  145. nepa_mcp-0.1.0/tribal/server.py +112 -0
  146. nepa_mcp-0.1.0/tribal/src/__init__.py +0 -0
  147. nepa_mcp-0.1.0/tribal/src/apis/__init__.py +1 -0
  148. nepa_mcp-0.1.0/tribal/src/apis/tribal_api.py +162 -0
  149. nepa_mcp-0.1.0/tribal/src/core/__init__.py +1 -0
  150. nepa_mcp-0.1.0/tribal/src/core/constants.py +32 -0
  151. nepa_mcp-0.1.0/usace/requirements.txt +7 -0
  152. nepa_mcp-0.1.0/usace/server.py +183 -0
  153. nepa_mcp-0.1.0/usace/src/__init__.py +0 -0
  154. nepa_mcp-0.1.0/usace/src/apis/__init__.py +0 -0
  155. nepa_mcp-0.1.0/usace/src/apis/usace_api.py +480 -0
  156. nepa_mcp-0.1.0/usace/src/core/__init__.py +0 -0
@@ -0,0 +1,53 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.so
5
+ *.egg-info/
6
+ build/
7
+ dist/
8
+ .venv/
9
+ venv/
10
+ .ruff_cache/
11
+ .pytest_cache/
12
+ .playwright-cli/
13
+ .playwright-mcp/
14
+ .mypy_cache/
15
+ .coverage
16
+ coverage.xml
17
+ htmlcov/
18
+ *.log
19
+
20
+ # Local environment and credentials
21
+ .env
22
+ .env.*
23
+ !.env.example
24
+ credentials.env
25
+ config.toml
26
+ handoffs/
27
+
28
+ # Generated MCP client backups and interrupted writes
29
+ *.nepa-mcp.bak
30
+ .mcp.json.tmp
31
+ .vscode/mcp.json.tmp
32
+
33
+ # Legacy deployment-generated files
34
+ */.bedrock_agentcore.yaml
35
+ */.bedrock_agentcore/
36
+
37
+ # Local outputs
38
+ output/
39
+ tmp/
40
+
41
+ # Pre-release review material that must stay out of the public repository
42
+ docs/*.docx
43
+ EIDR/
44
+
45
+ # OS and editor files
46
+ .DS_Store
47
+ .claude/
48
+ .vscode/
49
+ !.vscode/
50
+ .vscode/*
51
+ !.vscode/mcp.json
52
+ .idea/
53
+ *.swp
@@ -0,0 +1,26 @@
1
+ cff-version: 1.2.0
2
+ message: "If you use this software, please cite it using the metadata in this file."
3
+ title: "PermitAI NEPA MCP Toolkit: Federal Environmental Data, Regulatory Research, and Geospatial Screening"
4
+ type: software
5
+ authors:
6
+ - family-names: Chaturvedi
7
+ given-names: Sarthak
8
+ website: "https://sarthakchat.github.io/"
9
+ - family-names: Chintalapati
10
+ given-names: Renuka
11
+ - family-names: Nally
12
+ given-names: Daniel
13
+ website: "https://www.pnnl.gov/people/dan-nally"
14
+ - family-names: Parker
15
+ given-names: Mike
16
+ website: "https://www.pnnl.gov/people/mike-parker"
17
+ - family-names: Munikoti
18
+ given-names: Sai
19
+ website: "https://www.pnnl.gov/people/sai-munikoti"
20
+ - family-names: Horawalavithana
21
+ given-names: Sameera
22
+ website: "https://www.pnnl.gov/people/sameera-horawalavithana"
23
+ version: 0.1.0
24
+ date-released: 2026-08-18
25
+ repository-code: "https://github.com/pnnl/nepa-mcp"
26
+ license: BSD-3-Clause
@@ -0,0 +1,171 @@
1
+ # Contributor Covenant 3.0 Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ We pledge to make our community welcoming, safe, and equitable for all.
6
+
7
+ We are committed to fostering an environment that respects and promotes the
8
+ dignity, rights, and contributions of all individuals, regardless of
9
+ characteristics including race, ethnicity, caste, color, age, physical
10
+ characteristics, neurodiversity, disability, sex or gender, gender identity or
11
+ expression, sexual orientation, language, philosophy or religion, national or
12
+ social origin, socio-economic position, level of education, or other status.
13
+ The same privileges of participation are extended to everyone who participates
14
+ in good faith and in accordance with this Covenant.
15
+
16
+ ## Encouraged Behaviors
17
+
18
+ While acknowledging differences in social norms, we all strive to meet our
19
+ community's expectations for positive behavior. We also understand that our
20
+ words and actions may be interpreted differently than we intend based on
21
+ culture, background, or native language.
22
+
23
+ With these considerations in mind, we agree to behave mindfully toward each
24
+ other and act in ways that center our shared values, including:
25
+
26
+ 1. Respecting the **purpose of our community**, our activities, and our ways of
27
+ gathering.
28
+ 2. Engaging **kindly and honestly** with others.
29
+ 3. Respecting **different viewpoints** and experiences.
30
+ 4. **Taking responsibility** for our actions and contributions.
31
+ 5. Gracefully giving and accepting **constructive feedback**.
32
+ 6. Committing to **repairing harm** when it occurs.
33
+ 7. Behaving in other ways that promote and sustain the **well-being of our
34
+ community**.
35
+
36
+ ## Restricted Behaviors
37
+
38
+ We agree to restrict the following behaviors in our community. Instances,
39
+ threats, and promotion of these behaviors are violations of this Code of
40
+ Conduct.
41
+
42
+ 1. **Harassment.** Violating explicitly expressed boundaries or engaging in
43
+ unnecessary personal attention after any clear request to stop.
44
+ 2. **Character attacks.** Making insulting, demeaning, or pejorative comments
45
+ directed at a community member or group of people.
46
+ 3. **Stereotyping or discrimination.** Characterizing anyone’s personality or
47
+ behavior on the basis of immutable identities or traits.
48
+ 4. **Sexualization.** Behaving in a way that would generally be considered
49
+ inappropriately intimate in the context or purpose of the community.
50
+ 5. **Violating confidentiality**. Sharing or acting on someone's personal or
51
+ private information without their permission.
52
+ 6. **Endangerment.** Causing, encouraging, or threatening violence or other
53
+ harm toward any person or group.
54
+ 7. Behaving in other ways that **threaten the well-being** of our community.
55
+
56
+ ### Other Restrictions
57
+
58
+ 1. **Misleading identity.** Impersonating someone else for any reason, or
59
+ pretending to be someone else to evade enforcement actions.
60
+ 2. **Failing to credit sources.** Not properly crediting the sources of content
61
+ you contribute.
62
+ 3. **Promotional materials**. Sharing marketing or other commercial content in
63
+ a way that is outside the norms of the community.
64
+ 4. **Irresponsible communication.** Failing to responsibly present content
65
+ which includes, links or describes any other restricted behaviors.
66
+
67
+ ## Reporting an Issue
68
+
69
+ Tensions can occur between community members even when they are trying their
70
+ best to collaborate. Not every conflict represents a code of conduct violation,
71
+ and this Code of Conduct reinforces encouraged behaviors and norms that can
72
+ help avoid conflicts and minimize harm.
73
+
74
+ When an incident does occur, it is important to report it promptly. To report a
75
+ possible violation, email
76
+ [policyai@pnnl.gov](mailto:policyai@pnnl.gov?subject=NEPA%20MCP%20Code%20of%20Conduct%20Report)
77
+ with the subject `NEPA MCP Code of Conduct Report`. Do not submit Code of
78
+ Conduct reports through public issues.
79
+
80
+ For this project, Community Moderators are Sarthak Chaturvedi, as primary
81
+ project maintainer, and designated recipients of the PermitAI mailbox. A report
82
+ concerning the primary maintainer will be handled by designated PermitAI
83
+ mailbox recipients without involving the subject of the report.
84
+
85
+ Community Moderators take reports of violations seriously and will make every
86
+ effort to respond in a timely manner. They will investigate all reports of code
87
+ of conduct violations, reviewing messages, logs, and recordings, or
88
+ interviewing witnesses and other participants. Community Moderators will keep
89
+ investigation and enforcement actions as transparent as possible while
90
+ prioritizing safety and confidentiality. In order to honor these values,
91
+ enforcement actions are carried out in private with the involved parties, but
92
+ communicating to the whole community may be part of a mutually agreed upon
93
+ resolution.
94
+
95
+ ## Addressing and Repairing Harm
96
+
97
+ If an investigation by the Community Moderators finds that this Code of Conduct
98
+ has been violated, the following enforcement ladder may be used to determine
99
+ how best to repair harm, based on the incident's impact on the individuals
100
+ involved and the community as a whole. Depending on the severity of a
101
+ violation, lower rungs on the ladder may be skipped.
102
+
103
+ 1. Warning
104
+ 1. Event: A violation involving a single incident or series of incidents.
105
+ 2. Consequence: A private, written warning from the Community Moderators.
106
+ 3. Repair: Examples of repair include a private written apology,
107
+ acknowledgement of responsibility, and seeking clarification on
108
+ expectations.
109
+ 2. Temporarily Limited Activities
110
+ 1. Event: A repeated incidence of a violation that previously resulted in a
111
+ warning, or the first incidence of a more serious violation.
112
+ 2. Consequence: A private, written warning with a time-limited cooldown
113
+ period designed to underscore the seriousness of the situation and give
114
+ the community members involved time to process the incident. The cooldown
115
+ period may be limited to particular communication channels or
116
+ interactions with particular community members.
117
+ 3. Repair: Examples of repair may include making an apology, using the
118
+ cooldown period to reflect on actions and impact, and being thoughtful
119
+ about re-entering community spaces after the period is over.
120
+ 3. Temporary Suspension
121
+ 1. Event: A pattern of repeated violation which the Community Moderators
122
+ have tried to address with warnings, or a single serious violation.
123
+ 2. Consequence: A private written warning with conditions for return from
124
+ suspension. In general, temporary suspensions give the person being
125
+ suspended time to reflect upon their behavior and possible corrective
126
+ actions.
127
+ 3. Repair: Examples of repair include respecting the spirit of the
128
+ suspension, meeting the specified conditions for return, and being
129
+ thoughtful about how to reintegrate with the community when the
130
+ suspension is lifted.
131
+ 4. Permanent Ban
132
+ 1. Event: A pattern of repeated code of conduct violations that other steps
133
+ on the ladder have failed to resolve, or a violation so serious that the
134
+ Community Moderators determine there is no way to keep the community safe
135
+ with this person as a member.
136
+ 2. Consequence: Access to all community spaces, tools, and communication
137
+ channels is removed. In general, permanent bans should be rarely used,
138
+ should have strong reasoning behind them, and should only be resorted to
139
+ if working through other remedies has failed to change the behavior.
140
+ 3. Repair: There is no possible repair in cases of this severity.
141
+
142
+ This enforcement ladder is intended as a guideline. It does not limit the
143
+ ability of Community Moderators to use their discretion and judgment, in
144
+ keeping with the best interests of our community.
145
+
146
+ ## Scope
147
+
148
+ This Code of Conduct applies within all community spaces, and also applies when
149
+ an individual is officially representing the community in public or other
150
+ spaces. Examples of representing our community include using an official email
151
+ address, posting via an official social media account, or acting as an
152
+ appointed representative at an online or offline event.
153
+
154
+ ## Attribution
155
+
156
+ This Code of Conduct is adapted from the Contributor Covenant, version 3.0,
157
+ permanently available at
158
+ [https://www.contributor-covenant.org/version/3/0/](https://www.contributor-covenant.org/version/3/0/).
159
+
160
+ Contributor Covenant is stewarded by the Organization for Ethical Source and
161
+ licensed under CC BY-SA 4.0. To view a copy of this license, visit
162
+ [https://creativecommons.org/licenses/by-sa/4.0/](https://creativecommons.org/licenses/by-sa/4.0/).
163
+
164
+ For answers to common questions about Contributor Covenant, see the FAQ at
165
+ [https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq).
166
+ Translations are provided at
167
+ [https://www.contributor-covenant.org/translations](https://www.contributor-covenant.org/translations).
168
+ Additional enforcement and community guideline resources can be found at
169
+ [https://www.contributor-covenant.org/resources](https://www.contributor-covenant.org/resources).
170
+ The enforcement ladder was inspired by the work of
171
+ [Mozilla’s code of conduct team](https://github.com/mozilla/inclusion).
@@ -0,0 +1,137 @@
1
+ # Contributing to NEPA MCP
2
+
3
+ Thank you for contributing to NEPA MCP. This project provides research and
4
+ screening tools for environmental and regulatory workflows. Contributions
5
+ should preserve the distinction between screening information and formal
6
+ agency, legal, consultation, jurisdictional, or permitting determinations.
7
+
8
+ Please review the [Code of Conduct](CODE_OF_CONDUCT.md),
9
+ [Security policy](SECURITY.md), [Support policy](SUPPORT.md), and
10
+ [project roles](MAINTAINERS.md) before participating.
11
+
12
+ ## Development setup
13
+
14
+ NEPA MCP requires Python 3.12 or newer. The development environment uses
15
+ [`uv`](https://docs.astral.sh/uv/):
16
+
17
+ ```bash
18
+ git clone https://github.com/pnnl/nepa-mcp.git
19
+ cd nepa-mcp
20
+ uv sync --all-groups
21
+ ```
22
+
23
+ Do not commit credentials or private project data. Optional Census and EPA AQS
24
+ credentials should be supplied through environment variables or the private
25
+ per-user configuration described in the README. Repository `.env` files,
26
+ generated credential files, and client-config backups are ignored by Git.
27
+
28
+ ## Repository structure
29
+
30
+ Each domain server has its own top-level directory:
31
+
32
+ ```text
33
+ server_name/
34
+ ├── requirements.txt
35
+ ├── server.py
36
+ └── src/
37
+ ├── apis/
38
+ └── core/
39
+ ```
40
+
41
+ The installable command, server registry, loader, client configuration, and
42
+ aggregate test proxy live in `nepa_mcp/`. Shared HTTP, ArcGIS, spatial, and
43
+ validation utilities live in `nepa_mcp_common/`.
44
+
45
+ When adding or renaming a server or tool, update every affected distribution
46
+ surface: the registry, package configuration, client examples, plugin
47
+ configuration, documentation, and tests.
48
+
49
+ ## Generated files
50
+
51
+ `docs/mcp-tool-catalog.md` is generated from the live MCP contracts. Do not
52
+ edit it manually. Regenerate and verify it with:
53
+
54
+ ```bash
55
+ uv run python scripts/generate_tool_catalog.py
56
+ uv run python scripts/generate_tool_catalog.py --check
57
+ ```
58
+
59
+ `uv.lock` is generated by `uv`. Commit lockfile changes when project or
60
+ development dependencies change, and avoid unrelated dependency refreshes.
61
+
62
+ ## Tests and quality checks
63
+
64
+ Run the following checks before opening a pull request:
65
+
66
+ ```bash
67
+ uv run ruff format --check .
68
+ uv run ruff check .
69
+ uv run python -m compileall -q .
70
+ uv run pytest -q
71
+ uv run pip-audit --progress-spinner off
72
+ ```
73
+
74
+ Add focused tests for behavioral changes. Tests should cover relevant MCP tool
75
+ contracts, validation and failure behavior, and partial or empty upstream
76
+ responses. Keep the default test suite reproducible without optional API
77
+ credentials.
78
+
79
+ Changes to external data integrations should preserve source URLs, retrieval
80
+ status, truncation or partial-result warnings, and other provenance needed to
81
+ review the result. Do not convert unavailable or incomplete source retrieval
82
+ into an apparently authoritative no-feature result.
83
+
84
+ ## Pull requests
85
+
86
+ Keep pull requests scoped and explain:
87
+
88
+ - the user or analyst problem being addressed;
89
+ - the affected servers, tools, and external sources;
90
+ - important behavioral or schema changes;
91
+ - tests and manual validation performed; and
92
+ - known limitations or follow-up work.
93
+
94
+ Update user-facing documentation when installation, configuration, tool
95
+ contracts, data behavior, or package metadata changes. Avoid combining
96
+ unrelated formatting, generated-file, and behavioral changes when they can be
97
+ reviewed independently.
98
+
99
+ Maintainers may request changes before merging. Submitting a contribution does
100
+ not imply that it will be accepted or included in a release.
101
+
102
+ ## Developer Certificate of Origin
103
+
104
+ Every commit must include a `Signed-off-by` line certifying compliance with the
105
+ [Developer Certificate of Origin 1.1](https://developercertificate.org/).
106
+ Sign off a commit with:
107
+
108
+ ```bash
109
+ git commit -s -m "Describe the change"
110
+ ```
111
+
112
+ The resulting commit message includes:
113
+
114
+ ```text
115
+ Signed-off-by: Your Name <your.email@example.com>
116
+ ```
117
+
118
+ The sign-off certifies that you have the right to submit the contribution under
119
+ the project's open-source license. It is not a copyright assignment or a
120
+ Contributor License Agreement. The name and email in the sign-off become part
121
+ of the public Git history.
122
+
123
+ If a commit is missing the sign-off, amend it before review:
124
+
125
+ ```bash
126
+ git commit --amend --signoff --no-edit
127
+ ```
128
+
129
+ ## Reporting concerns
130
+
131
+ Use public issues only for non-sensitive bugs and usage questions. Do not place
132
+ credentials, controlled information, private project data, suspected
133
+ vulnerability details, or Code of Conduct reports in a public issue.
134
+
135
+ Code of Conduct reports should follow the private contact instructions in
136
+ `CODE_OF_CONDUCT.md`. Suspected vulnerabilities should follow the private
137
+ reporting instructions in `SECURITY.md`.
nepa_mcp-0.1.0/LICENSE ADDED
@@ -0,0 +1,28 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright Battelle Memorial Institute 2026
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ 3. Neither the name of the copyright holder nor the names of its contributors
16
+ may be used to endorse or promote products derived from this software without
17
+ specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,25 @@
1
+ # Project Roles
2
+
3
+ This file records current repository-governance roles. It does not determine
4
+ legal inventorship, employment authority, or ownership.
5
+
6
+ ## Maintainer
7
+
8
+ ### Sarthak Chaturvedi
9
+
10
+ Primary maintainer, responsible for technical direction, reviewing and merging
11
+ changes, and coordinating package releases.
12
+
13
+ ## Contributor
14
+
15
+ ### Renuka Chintalapati
16
+
17
+ Project contributor. Contributor status recognizes development contributions
18
+ but does not by itself grant authority to merge changes or publish releases.
19
+
20
+ ## Updating roles
21
+
22
+ Changes to maintainer or release authority should be recorded through a
23
+ reviewed repository change. Security reports are received through the route in
24
+ `SECURITY.md`; the primary maintainer coordinates technical triage with
25
+ designated recipients of the PermitAI project mailbox.
nepa_mcp-0.1.0/NOTICE ADDED
@@ -0,0 +1,23 @@
1
+ DISCLAIMER
2
+ This material was prepared as an account of work sponsored by an agency of the
3
+ United States Government. Neither the United States Government nor the United
4
+ States Department of Energy, nor Battelle, nor any of their employees, nor any
5
+ jurisdiction or organization that has cooperated in the development of these
6
+ materials, makes any warranty, express or implied, or assumes any legal
7
+ liability or responsibility for the accuracy, completeness, or usefulness or
8
+ any information, apparatus, product, software, or process disclosed, or
9
+ represents that its use would not infringe privately owned rights.
10
+
11
+ Reference herein to any specific commercial product, process, or service by
12
+ trade name, trademark, manufacturer, or otherwise does not necessarily
13
+ constitute or imply its endorsement, recommendation, or favoring by the United
14
+ States Government or any agency thereof, or Battelle Memorial Institute. The
15
+ views and opinions of authors expressed herein do not necessarily state or
16
+ reflect those of the United States Government or any agency thereof.
17
+
18
+ PACIFIC NORTHWEST NATIONAL LABORATORY
19
+ operated by
20
+ BATTELLE
21
+ for the
22
+ UNITED STATES DEPARTMENT OF ENERGY
23
+ under Contract DE-AC05-76RL01830