@emseepea/server 0.15.0 → 0.17.0

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.
package/README.md CHANGED
@@ -310,6 +310,10 @@ MCP request. Its bounded fields are the known MCP method, known capability name
310
310
  when applicable, HTTP method and status, transport outcome, protocol outcome,
311
311
  and duration.
312
312
 
313
+ A refused production request may also carry a fixed `forwardingRefusal` reason.
314
+ It names the forwarding setting an operator has to correct, such as
315
+ `forwardedHops`. It never carries a caller-supplied value.
316
+
313
317
  `outcome` remains `finished` or `disconnected` for transport compatibility.
314
318
  `protocolOutcome` is `success`, `tool_error`, `protocol_error`, or
315
319
  `disconnected`, so adapters can count MCP failures without reading encoded JSON
@@ -770,13 +774,98 @@ Replace these example addresses with yours. The server still listens locally
770
774
  by default. Choose a private listening address explicitly when starting it,
771
775
  and restrict network access so only your proxy can reach it.
772
776
 
773
- Your proxy must replace caller-supplied forwarding headers and send:
777
+ Your proxy must control the forwarding headers and send:
774
778
 
775
779
  - `X-Forwarded-Proto: https` for the original HTTPS connection
776
- - `X-Forwarded-For` containing one client IP address, not a comma-separated chain
780
+ - `X-Forwarded-For` containing the client IP address, either alone or followed
781
+ by entries your proxy appends
777
782
  - `Host` matching an entry in `allowedAuthorities`
778
783
 
779
- It must also forward streamed responses without buffering them.
784
+ If your proxy appends to `X-Forwarded-For` instead of replacing it, set
785
+ `forwardedHops`. The next section explains how.
786
+
787
+ #### A proxy with no fixed address
788
+
789
+ Some platforms give you no fixed proxy address to list. Cloud Run behind an
790
+ external load balancer is one: the address your server sees is infrastructure,
791
+ and it changes. Instead of listing an address, have the proxy prove itself.
792
+
793
+ Configure your proxy to add a header carrying a secret. On a Google load
794
+ balancer that is a custom request header on the backend service. The header can
795
+ be any name except `host`, `forwarded`, or an `x-forwarded-*` name, and the
796
+ secret must be at least 32 characters.
797
+
798
+ Then set `proxyBoundary` to that header and secret in the `deployment` object
799
+ above, in place of `trustedProxyAddresses`. Supply exactly one of the two: a
800
+ profile with both is refused, and so is one with neither. Read the secret from
801
+ the environment rather than writing it into your source.
802
+
803
+ Set the header on your proxy first. Until the proxy is sending it, every
804
+ request is refused, which is the safe direction for a mistake to go: the server
805
+ closes rather than opens.
806
+
807
+ This replaces the address check and nothing else. Your proxy must still send
808
+ the forwarding headers listed above, and the authority, origin and rate-limit
809
+ checks all still run.
810
+
811
+ The server compares what arrives against the secret and refuses anything else.
812
+ A caller cannot guess it. Anyone who learns it can reach your server from any
813
+ address until you rotate it.
814
+
815
+ Treat the secret as a credential. Keep it out of source control, supply it from
816
+ your platform's secret store, and rotate it as you would any other. Em See Pea
817
+ never writes it to a log and never sends it to an observability adapter.
818
+
819
+ Your own infrastructure is the part to check. The secret travels as a request
820
+ header, and load balancers and CDNs often log request headers by default. Turn
821
+ off logging for that header at your proxy and anywhere in front of it, or you
822
+ will have a live credential in your logs.
823
+
824
+ #### A proxy that appends instead of replacing
825
+
826
+ Some load balancers append their own address after the client's, so
827
+ `X-Forwarded-For` arrives with more than one entry. Set `forwardedHops` to how
828
+ many entries yours appends after the client. It defaults to `0`, meaning the
829
+ header must carry exactly one entry, and anything longer is refused.
830
+
831
+ Add `forwardedHops` to the same `deployment` object as
832
+ `trustedProxyAddresses` in the example above. A single appending balancer is
833
+ `forwardedHops: 1`.
834
+
835
+ The client address is read that many positions from the end. Anything a caller
836
+ puts in front of it is ignored. Reading the first entry instead would let a
837
+ caller send a different value on every request, so the rate limit would never
838
+ catch them.
839
+
840
+ The entries after the client are counted, not checked. The count on its own
841
+ picks out the client address, so it has to match your deployment exactly.
842
+
843
+ Set the count from what your deployment actually sends, not from what a platform
844
+ is documented to do. Log the raw `X-Forwarded-For` from a request you make
845
+ yourself and count the entries after your own address.
846
+
847
+ Both wrong values fail, and they fail differently. A count higher than the truth
848
+ is the dangerous one.
849
+
850
+ - **Higher than the truth is dangerous, and silent.** The position being read
851
+ moves into the part of the header a caller controls. A caller who prepends
852
+ their own value is served, and the rate limit never catches them. Nothing
853
+ reports it.
854
+ - **Higher than the truth also refuses honest callers**, whose header is shorter
855
+ than the count expects. Each refusal is recorded in the server's observability
856
+ event as `forwardingRefusal`. The response does not say why: telling a caller
857
+ would let them add entries until they were served.
858
+ - **Lower than the truth is the safe mistake.** It reads an address your own
859
+ infrastructure appended, so every caller shares one rate limit. You see it at
860
+ once, because the limit starts applying to everyone together.
861
+
862
+ Refused honest traffic is the sign that the count is too high. The reverse does
863
+ not hold. No refusals does not mean the count is right, because the half a
864
+ caller exploits is refused by nothing.
865
+
866
+ #### Streamed responses
867
+
868
+ Your proxy must also forward streamed responses without buffering them.
780
869
  `X-Accel-Buffering: no` asks compatible proxies not to buffer; it does not
781
870
  configure your proxy for you.
782
871
 
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ import { McpServer, inputRequired as sdkInputRequired, type AuthMetadataOptions,
2
2
  import type { FastifyInstance, RouteHandlerMethod } from "fastify";
3
3
  import { z } from "zod";
4
4
  import { type CallerClassification, type ObservabilityAdapter } from "./telemetry.js";
5
- export { openTelemetry, structuredLogging, type CallerClassification, type ObservabilityAdapter, type ObservabilityEvent, type ObservedHttpMethod, type ObservedMcpMethod, type ObservedProtocolOutcome, } from "./telemetry.js";
5
+ export { openTelemetry, structuredLogging, type CallerClassification, type ObservabilityAdapter, type ObservabilityEvent, type ObservedForwardingRefusal, type ObservedHttpMethod, type ObservedMcpMethod, type ObservedProtocolOutcome, } from "./telemetry.js";
6
6
  export * from "./ui.js";
7
7
  export type ClientInputRequest = Extract<InputRequest, {
8
8
  method: "elicitation/create" | "roots/list";
@@ -492,7 +492,58 @@ export type DeploymentProfile = {
492
492
  readonly mode: "production-behind-proxy";
493
493
  readonly allowedAuthorities: readonly string[];
494
494
  readonly allowedOrigins: readonly string[];
495
- readonly trustedProxyAddresses: readonly string[];
495
+ /**
496
+ * The literal addresses the proxy in front may connect from. A CIDR
497
+ * range is refused: the comparison is exact membership.
498
+ *
499
+ * Supply this OR `proxyBoundary`, never both and never neither.
500
+ */
501
+ readonly trustedProxyAddresses?: readonly string[];
502
+ /**
503
+ * Proves a request arrived through the proxy, for deployments where no
504
+ * stable peer address exists to enumerate. The proxy injects `header`
505
+ * with the value `secret`; the server compares and refuses anything
506
+ * else.
507
+ *
508
+ * This replaces the peer address comparison and changes nothing else:
509
+ * the protocol, authority, origin and rate-limit checks all still run.
510
+ *
511
+ * A proxy that is not injecting the header refuses every request, so a
512
+ * mistake here closes the server rather than opening it. Configure the
513
+ * header on the proxy first, then deploy with this set.
514
+ *
515
+ * `secret` is a credential. Keep it out of source control and out of
516
+ * the deployment config file: supply it from your platform's secret
517
+ * store at runtime. It is never logged and never sent to an
518
+ * observability adapter.
519
+ *
520
+ * Supply this OR `trustedProxyAddresses`, never both and never neither.
521
+ */
522
+ readonly proxyBoundary?: {
523
+ readonly header: string;
524
+ readonly secret: string;
525
+ };
526
+ /**
527
+ * How many entries the infrastructure in front appends to
528
+ * `x-forwarded-for` AFTER the client address. Defaults to 0.
529
+ *
530
+ * 0 means the header carries the client and nothing else, so anything
531
+ * longer is refused: with nothing trustworthy appending, a second entry
532
+ * can only have been supplied by the caller.
533
+ *
534
+ * A load balancer that appends its own address after the client is 1:
535
+ * the client is then the second-to-last entry, and anything before it
536
+ * is caller-supplied and ignored. Reading the FIRST entry instead would
537
+ * let a caller choose their own rate-limit key.
538
+ *
539
+ * Set it from what the deployment actually sends, not from what a
540
+ * platform is assumed to do. Counting from the end keeps a caller out
541
+ * of the rate-limit key when the count is right; it cannot tell you the
542
+ * count is wrong. A count higher than the truth reads an entry the
543
+ * caller supplied, on any request that carries a prefix, and nothing
544
+ * here detects it.
545
+ */
546
+ readonly forwardedHops?: number;
496
547
  readonly rateLimit: Readonly<RateLimitOptions>;
497
548
  };
498
549
  export declare function loadDeploymentProfile(environment?: Readonly<Record<string, string | undefined>>): DeploymentProfile;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import { GetPromptResultSchema, ReadResourceResultSchema, } from "@modelcontextp
3
3
  import { toNodeHandler } from "@modelcontextprotocol/node";
4
4
  import { McpServer, InMemoryServerEventBus, OAuthError, OAuthErrorCode, ProtocolError, ProtocolErrorCode, ResourceTemplate, bearerAuthChallengeResponse, buildOAuthProtectedResourceMetadata, checkResourceAllowed, classifyInboundRequest, completable, createMcpHandler, createRequestStateCodec, getOAuthProtectedResourceMetadataUrl, inputRequired as sdkInputRequired, acceptedContent as sdkAcceptedContent, inputResponse as sdkInputResponse, isInputRequiredResult, oauthMetadataResponse, specTypeSchemas, verifyBearerToken, } from "@modelcontextprotocol/server";
5
5
  import { AsyncLocalStorage } from "node:async_hooks";
6
- import { createHash } from "node:crypto";
6
+ import { createHash, timingSafeEqual } from "node:crypto";
7
7
  import { readFileSync } from "node:fs";
8
8
  import { readdir, realpath } from "node:fs/promises";
9
9
  import { isIP } from "node:net";
@@ -134,26 +134,48 @@ export function loadDeploymentProfile(environment = process.env) {
134
134
  const parsed = z.strictObject({
135
135
  allowedAuthorities: z.array(z.string()).min(1),
136
136
  allowedOrigins: z.array(z.string()).min(1),
137
- trustedProxyAddresses: z.array(z.string()).min(1),
137
+ trustedProxyAddresses: z.array(z.string()).min(1).optional(),
138
+ // The config file carries non-secret policy only, so it names the
139
+ // environment variable holding the secret rather than the secret itself.
140
+ proxyBoundary: z.strictObject({
141
+ header: z.string(),
142
+ secretEnv: z.string().min(1),
143
+ }).optional(),
144
+ forwardedHops: z.number().int().nonnegative().optional(),
138
145
  rateLimit: z.strictObject({
139
146
  maxRequests: z.number().int().positive(),
140
147
  windowMs: z.number().int().positive(),
141
148
  maxClients: z.number().int().positive(),
142
149
  }),
143
150
  }).parse(JSON.parse(source));
144
- const profile = { mode, ...parsed };
151
+ // The file names the variable holding the proxy secret; the value itself
152
+ // comes from the environment, so the config stays non-secret policy.
153
+ const { proxyBoundary: fileBoundary, ...policy } = parsed;
154
+ let proxyBoundary;
155
+ if (fileBoundary) {
156
+ const secret = environment[fileBoundary.secretEnv];
157
+ if (!secret) {
158
+ throw new TypeError(`Production deployment config names ${fileBoundary.secretEnv} for the proxy secret, and it is not set`);
159
+ }
160
+ proxyBoundary = { header: fileBoundary.header, secret };
161
+ }
162
+ const profile = {
163
+ mode,
164
+ ...policy,
165
+ ...(proxyBoundary ? { proxyBoundary } : {}),
166
+ };
145
167
  const normalized = normalizeDeployment(profile);
146
168
  if (normalized.mode !== "production-behind-proxy")
147
169
  throw new TypeError("Production deployment config is invalid");
148
170
  for (const [label, values, normalizedValues] of [
149
171
  ["allowed authority", parsed.allowedAuthorities, normalized.allowedAuthorities],
150
172
  ["allowed origin", parsed.allowedOrigins, normalized.allowedOrigins],
151
- ["trusted proxy address", parsed.trustedProxyAddresses, normalized.trustedProxyAddresses],
173
+ ["trusted proxy address", parsed.trustedProxyAddresses ?? [], normalized.trustedProxyAddresses ?? new Set()],
152
174
  ]) {
153
175
  if (normalizedValues.size !== values.length)
154
176
  throw new TypeError(`Duplicate ${label}`);
155
177
  }
156
- for (const address of parsed.trustedProxyAddresses) {
178
+ for (const address of parsed.trustedProxyAddresses ?? []) {
157
179
  if (normalizeIp(address) !== address)
158
180
  throw new TypeError(`Trusted proxy address is not normalized: ${address}`);
159
181
  }
@@ -1736,22 +1758,68 @@ function isJsonParseError(error) {
1736
1758
  (error.code === "FST_ERR_CTP_INVALID_JSON_BODY" ||
1737
1759
  error.code === "FST_ERR_CTP_EMPTY_JSON_BODY"));
1738
1760
  }
1761
+ /**
1762
+ * The client address out of `x-forwarded-for`, counted from the end.
1763
+ *
1764
+ * Counting from the end is the whole point. Proxies APPEND, so the entries
1765
+ * nearest the end are the ones written by infrastructure and the ones nearest
1766
+ * the start are whatever the caller sent. `hops` says how many of those
1767
+ * trailing entries belong to infrastructure; the client is the one just
1768
+ * before them.
1769
+ *
1770
+ * At 0 nothing trustworthy appends, so a header with more than one entry is
1771
+ * not evidence of anything and is refused rather than read.
1772
+ */
1773
+ function forwardedClient(forwardedFor, hops) {
1774
+ if (!forwardedFor)
1775
+ return undefined;
1776
+ const entries = forwardedFor.split(",").map((entry) => entry.trim());
1777
+ if (hops === 0)
1778
+ return entries.length === 1 ? normalizeIp(entries[0]) : undefined;
1779
+ if (entries.length <= hops)
1780
+ return undefined;
1781
+ return normalizeIp(entries[entries.length - 1 - hops]);
1782
+ }
1739
1783
  function validateProductionRequest(request, reply, deployment, limiter) {
1740
1784
  const reject = (status, message) => {
1741
1785
  void sendRpcError(reply, status, -32004, message);
1742
1786
  return false;
1743
1787
  };
1744
- const peer = normalizeIp(request.raw.socket.remoteAddress);
1745
- if (!peer || !deployment.trustedProxyAddresses.has(peer)) {
1746
- return reject(403, "Request did not come from a trusted proxy");
1788
+ // ADR-0102: the boundary is either an address the proxy connects from, or a
1789
+ // secret the proxy injects that a caller cannot know. Exactly one is
1790
+ // configured, and `normalizeDeployment` refuses a profile with neither, so
1791
+ // the `else` below is reached only when a boundary was proved by header.
1792
+ if (deployment.proxyBoundary !== undefined) {
1793
+ if (!provedProxyHop(request.raw.rawHeaders, deployment.proxyBoundary)) {
1794
+ // The same message as the address failure: naming the header or saying
1795
+ // the value was close would help a caller guess at it.
1796
+ return reject(403, "Request did not come from a trusted proxy");
1797
+ }
1798
+ }
1799
+ else {
1800
+ const peer = normalizeIp(request.raw.socket.remoteAddress);
1801
+ if (!deployment.trustedProxyAddresses?.has(peer ?? "")) {
1802
+ return reject(403, "Request did not come from a trusted proxy");
1803
+ }
1747
1804
  }
1748
1805
  const proto = singleHeader(request.raw.rawHeaders, "x-forwarded-proto");
1749
1806
  const forwardedFor = singleHeader(request.raw.rawHeaders, "x-forwarded-for");
1750
1807
  const host = singleHeader(request.raw.rawHeaders, "host");
1751
1808
  const origin = singleHeader(request.raw.rawHeaders, "origin");
1752
- const client = forwardedFor && !forwardedFor.includes(",") ? normalizeIp(forwardedFor) : undefined;
1753
- if (proto !== "https" || !client)
1809
+ const client = forwardedClient(forwardedFor, deployment.forwardedHops);
1810
+ if (proto !== "https" || !client) {
1811
+ // ADR-0102: the operator calibrating forwardedHops needs to know the header
1812
+ // was too short for what was declared; the caller must not be told, because
1813
+ // a refused caller who learns that could add prefix entries until they are
1814
+ // served. The response is the same generic message for every reason.
1815
+ if (forwardedFor !== null && forwardedFor !== undefined
1816
+ && forwardedFor.split(",").length <= deployment.forwardedHops) {
1817
+ const state = observabilityState(request);
1818
+ if (state)
1819
+ state.forwardingRefusal = "hop-count-mismatch";
1820
+ }
1754
1821
  return reject(403, "Invalid forwarding metadata");
1822
+ }
1755
1823
  if (!host || !deployment.allowedAuthorities.has(normalizeAuthority(host) ?? "")) {
1756
1824
  return reject(403, "Authority is not allowed");
1757
1825
  }
@@ -1898,18 +1966,66 @@ function normalizeCallerClassifications(classifications) {
1898
1966
  function isLoopbackUrl(url) {
1899
1967
  return url.hostname === "localhost" || url.hostname === "127.0.0.1" || url.hostname === "[::1]";
1900
1968
  }
1969
+ // ADR-0102: a header-proved proxy boundary. The value is a credential, so it
1970
+ // is held as a SHA-256 digest and compared against the digest of whatever
1971
+ // arrived. Equal-length digests let `timingSafeEqual` do its job without the
1972
+ // comparison leaking the secret's length.
1973
+ function normalizeProxyBoundary(boundary) {
1974
+ const header = boundary.header.toLowerCase();
1975
+ if (!/^[a-z0-9!#$%&'*+.^_`|~-]+$/.test(header)) {
1976
+ throw new TypeError(`proxyBoundary.header is not a valid header name: ${boundary.header}`);
1977
+ }
1978
+ // A caller controls what arrives in a forwarding header, and a proxy
1979
+ // rewrites them for its own purposes, so neither can carry the proof.
1980
+ if (header.startsWith("x-forwarded-") || header === "forwarded" || header === "host") {
1981
+ throw new TypeError(`proxyBoundary.header must not be a forwarding header: ${boundary.header}`);
1982
+ }
1983
+ if (boundary.secret.length < 32) {
1984
+ throw new TypeError("proxyBoundary.secret must be at least 32 characters");
1985
+ }
1986
+ // A header value reaches the request path decoded as latin1, while this
1987
+ // string hashes as UTF-8. Outside printable ASCII the two disagree and the
1988
+ // secret could never match, refusing every request with nothing to say why.
1989
+ // Surrounding spaces are refused for the same reason: a proxy strips them.
1990
+ if (!/^[\x21-\x7e](?:[\x20-\x7e]*[\x21-\x7e])?$/.test(boundary.secret)) {
1991
+ throw new TypeError("proxyBoundary.secret must be printable ASCII with no surrounding spaces");
1992
+ }
1993
+ return { header, digest: createHash("sha256").update(boundary.secret).digest() };
1994
+ }
1995
+ function provedProxyHop(rawHeaders, boundary) {
1996
+ // `singleHeader` returns null for a repeated field, so a caller cannot send
1997
+ // the header twice and hope one of them is taken.
1998
+ const supplied = singleHeader(rawHeaders, boundary.header);
1999
+ if (supplied === null || supplied === undefined || supplied === "")
2000
+ return false;
2001
+ return timingSafeEqual(createHash("sha256").update(supplied).digest(), boundary.digest);
2002
+ }
1901
2003
  function normalizeDeployment(profile) {
1902
2004
  if (profile.mode === "loopback")
1903
2005
  return profile;
2006
+ // ADR-0102: a deployment states its proxy boundary one way or the other. An
2007
+ // omission must not read as "platform-enforced", because that is also what
2008
+ // forgetting looks like.
2009
+ const declared = profile.proxyBoundary !== undefined;
2010
+ const enumerated = profile.trustedProxyAddresses !== undefined;
2011
+ if (declared === enumerated) {
2012
+ throw new TypeError("Production deployment needs exactly one of trustedProxyAddresses or proxyBoundary");
2013
+ }
1904
2014
  if (!profile.allowedAuthorities.length || !profile.allowedOrigins.length ||
1905
- !profile.trustedProxyAddresses.length) {
2015
+ (enumerated && !profile.trustedProxyAddresses?.length)) {
1906
2016
  throw new TypeError("Production deployment allowlists must not be empty");
1907
2017
  }
1908
2018
  return {
1909
2019
  mode: profile.mode,
1910
2020
  allowedAuthorities: new Set(profile.allowedAuthorities.map((value) => requiredNormalized("allowed authority", value, normalizeAuthority))),
1911
2021
  allowedOrigins: new Set(profile.allowedOrigins.map((value) => requiredNormalized("allowed HTTPS origin", value, normalizeOrigin))),
1912
- trustedProxyAddresses: new Set(profile.trustedProxyAddresses.map((value) => requiredNormalized("trusted proxy IP address", value, normalizeIp))),
2022
+ trustedProxyAddresses: profile.trustedProxyAddresses === undefined
2023
+ ? undefined
2024
+ : new Set(profile.trustedProxyAddresses.map((value) => requiredNormalized("trusted proxy IP address", value, normalizeIp))),
2025
+ proxyBoundary: profile.proxyBoundary === undefined
2026
+ ? undefined
2027
+ : normalizeProxyBoundary(profile.proxyBoundary),
2028
+ forwardedHops: nonNegativeInteger("forwardedHops", profile.forwardedHops ?? 0),
1913
2029
  rateLimit: {
1914
2030
  maxRequests: positiveInteger("rateLimit.maxRequests", profile.rateLimit.maxRequests),
1915
2031
  windowMs: positiveInteger("rateLimit.windowMs", profile.rateLimit.windowMs),
@@ -2528,6 +2644,11 @@ function assertNonEmpty(field, value) {
2528
2644
  if (!value.trim())
2529
2645
  throw new TypeError(`${field} must not be empty`);
2530
2646
  }
2647
+ function nonNegativeInteger(field, value) {
2648
+ if (!Number.isSafeInteger(value) || value < 0)
2649
+ throw new TypeError(`${field} must be a non-negative safe integer`);
2650
+ return value;
2651
+ }
2531
2652
  function positiveInteger(field, value) {
2532
2653
  if (!Number.isSafeInteger(value) || value <= 0)
2533
2654
  throw new TypeError(`${field} must be a positive safe integer`);