@oss-scout/mcp 0.12.2 → 0.13.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/dist/index.d.ts CHANGED
@@ -12,7 +12,7 @@ export { registerResources } from "./resources.js";
12
12
  /** Server identity, kept in one place for the bin and any embedding host. */
13
13
  export declare const SERVER_INFO: {
14
14
  readonly name: "oss-scout-mcp";
15
- readonly version: "0.12.2";
15
+ readonly version: "0.13.0";
16
16
  };
17
17
  /**
18
18
  * Build a fully-wired MCP server (tools + resources) around a scout.
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ export { registerResources } from "./resources.js";
15
15
  /** Server identity, kept in one place for the bin and any embedding host. */
16
16
  export const SERVER_INFO = {
17
17
  name: "oss-scout-mcp",
18
- version: "0.12.2", // x-release-please-version
18
+ version: "0.13.0", // x-release-please-version
19
19
  };
20
20
  /**
21
21
  * Build a fully-wired MCP server (tools + resources) around a scout.
@@ -40692,15 +40692,17 @@ var OssScout = class {
40692
40692
  starred: rotation.starredOffset ?? 0,
40693
40693
  maintained: rotation.maintainedOffset ?? 0
40694
40694
  },
40695
- strategyRotationOffset: rotation.strategyOffset ?? 0
40695
+ // A full search runs every enabled phase in one run, so it skips the
40696
+ // one-strategy round-robin (#336) that the default search uses.
40697
+ strategyRotationOffset: options?.full ? void 0 : rotation.strategyOffset ?? 0
40696
40698
  }));
40697
40699
  } catch (err) {
40698
40700
  if (err instanceof ValidationError) {
40699
- this.advanceRotation(rotation, err.strategiesUsed ?? []);
40701
+ this.advanceRotation(rotation, err.strategiesUsed ?? [], options?.full);
40700
40702
  }
40701
40703
  throw err;
40702
40704
  }
40703
- this.advanceRotation(rotation, strategiesUsed);
40705
+ this.advanceRotation(rotation, strategiesUsed, options?.full);
40704
40706
  for (const c of candidates) {
40705
40707
  this.updateRepoSignalsFromHealth(c.projectHealth);
40706
40708
  }
@@ -40722,9 +40724,10 @@ var OssScout = class {
40722
40724
  * nothing must still rotate, or the same barren slice would lead every
40723
40725
  * subsequent run. Skipped/gated phases don't burn a rotation slot. The
40724
40726
  * round-robin strategy cursor (#336) moves to just after the strategy that
40725
- * led (the first one used), so the next search starts with the next one.
40727
+ * led (the first one used), so the next search starts with the next one. A
40728
+ * full search ran every strategy, so it leaves that cursor where it was.
40726
40729
  */
40727
- advanceRotation(rotation, strategiesUsed) {
40730
+ advanceRotation(rotation, strategiesUsed, full = false) {
40728
40731
  const ran = (strategy) => strategiesUsed.includes(strategy) ? 1 : 0;
40729
40732
  if (strategiesUsed.length === 0)
40730
40733
  return;
@@ -40734,7 +40737,7 @@ var OssScout = class {
40734
40737
  phase0Offset: (rotation.phase0Offset ?? 0) + ran("merged"),
40735
40738
  starredOffset: (rotation.starredOffset ?? 0) + ran("starred"),
40736
40739
  maintainedOffset: (rotation.maintainedOffset ?? 0) + ran("maintained"),
40737
- strategyOffset: CONCRETE_STRATEGIES.indexOf(strategiesUsed[0]) + 1,
40740
+ strategyOffset: full ? rotation.strategyOffset : CONCRETE_STRATEGIES.indexOf(strategiesUsed[0]) + 1,
40738
40741
  lastRotatedAt: (/* @__PURE__ */ new Date()).toISOString()
40739
40742
  };
40740
40743
  this.dirty = true;
@@ -41548,6 +41551,9 @@ function registerTools(server, scout) {
41548
41551
  strategies: external_exports3.string().optional().describe(
41549
41552
  "Comma-separated search strategies: merged, orgs, starred, broad, maintained, all"
41550
41553
  ),
41554
+ full: external_exports3.boolean().optional().describe(
41555
+ "Run every enabled strategy in this search instead of one per search in rotation. More API calls, so it can take a few minutes"
41556
+ ),
41551
41557
  preferLanguages: external_exports3.array(external_exports3.string()).optional().describe(
41552
41558
  "Soft-boost ranking for candidates whose repo language matches one of these (case-insensitive). Personalization tier between recommendation and viabilityScore (#1244). Not a filter; only reorders."
41553
41559
  ),
@@ -41567,6 +41573,7 @@ function registerTools(server, scout) {
41567
41573
  async ({
41568
41574
  maxResults,
41569
41575
  strategies,
41576
+ full,
41570
41577
  preferLanguages,
41571
41578
  preferRepos,
41572
41579
  avoidRepos,
@@ -41588,6 +41595,7 @@ function registerTools(server, scout) {
41588
41595
  scout.search({
41589
41596
  maxResults: maxResults ?? 10,
41590
41597
  strategies: parsedStrategies,
41598
+ full,
41591
41599
  preferLanguages,
41592
41600
  preferRepos,
41593
41601
  avoidRepos,
@@ -41894,7 +41902,7 @@ function registerResources(server, scout) {
41894
41902
  // src/index.ts
41895
41903
  var SERVER_INFO = {
41896
41904
  name: "oss-scout-mcp",
41897
- version: "0.12.2"
41905
+ version: "0.13.0"
41898
41906
  // x-release-please-version
41899
41907
  };
41900
41908
  function createServer(scout) {
package/dist/tools.js CHANGED
@@ -45,6 +45,10 @@ export function registerTools(server, scout) {
45
45
  .string()
46
46
  .optional()
47
47
  .describe("Comma-separated search strategies: merged, orgs, starred, broad, maintained, all"),
48
+ full: z
49
+ .boolean()
50
+ .optional()
51
+ .describe("Run every enabled strategy in this search instead of one per search in rotation. More API calls, so it can take a few minutes"),
48
52
  preferLanguages: z
49
53
  .array(z.string())
50
54
  .optional()
@@ -67,7 +71,7 @@ export function registerTools(server, scout) {
67
71
  .max(1)
68
72
  .optional()
69
73
  .describe("Diversity counterweight (#1244): fraction of result slots reserved for candidates that matched NEITHER preference list. Counters echo-chamber bias when boosts accumulate over time. 0 disables, 1 reserves every slot for diversity. Default 0."),
70
- }, async ({ maxResults, strategies, preferLanguages, preferRepos, avoidRepos, boostIssueTypes, diversityRatio, }) => {
74
+ }, async ({ maxResults, strategies, full, preferLanguages, preferRepos, avoidRepos, boostIssueTypes, diversityRatio, }) => {
71
75
  try {
72
76
  // Validate each CSV entry with a readable error instead of letting a
73
77
  // raw ZodError string reach the model (#295).
@@ -84,6 +88,7 @@ export function registerTools(server, scout) {
84
88
  const result = await withTimeout(scout.search({
85
89
  maxResults: maxResults ?? 10,
86
90
  strategies: parsedStrategies,
91
+ full,
87
92
  preferLanguages,
88
93
  preferRepos,
89
94
  avoidRepos,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oss-scout/mcp",
3
- "version": "0.12.2",
3
+ "version": "0.13.0",
4
4
  "description": "MCP server for oss-scout — exposes issue discovery and vetting as MCP tools",
5
5
  "type": "module",
6
6
  "bin": {
@@ -18,7 +18,7 @@
18
18
  "dependencies": {
19
19
  "@modelcontextprotocol/sdk": "^1.32.1",
20
20
  "zod": "^4.3.6",
21
- "@oss-scout/core": "^1.8.2"
21
+ "@oss-scout/core": "^1.9.0"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@types/node": "^25.5.0",