Releases: dfch/biz.dfch.AsdSte100Mcp
Releases · dfch/biz.dfch.AsdSte100Mcp
Release list
v3.0.0 add word find_many tool
[3.0.0] - 2026-08-02
Added
word_find_manytool — exact-match search for multiple terms in a single
call. Accepts a list of 1-25 terms and returns oneWordFindEntry
(term+results) per input term, in the same order as the input, so
a term matching zero, one, or several vocabulary entries is always
represented positionally rather than as a flattened, ambiguous list.
Newmodels/word_find_entry.py(WordFindEntrymodel) and
tools/words/word_find_many.py, registered intools/words/__init__.py.asdste100://versionMCP resource — installed version numbers of the MCP
server itself (biz-dfch-asdste100mcp) and its three data-backing
libraries:biz-dfch-asdste100vocab,biz-dfch-asdste100rules, and
biz-dfch-asdste100nlp. Backed byimportlib.metadata.version(); no
network calls. Newmodels/version_info.py(VersionInfomodel) and
resources/version.py, registered inresources/__init__.py.- MCP resource support, in addition to tools:
asdste100://rules/toc— table-of-contents outline of the ruleset (mirrors
therules_toctool with nosectionfilter).asdste100://rules/rule/{id_}— a single rule/recommendation/information
item by exact id, e.g.asdste100://rules/rule/R1.1(mirrors the
rules_findtool).- New
resources/package (mirroring the existingtools/package
structure), with arules/sub-package for the rules resources;
registered inserver.pyalongside the existingtoolsimport. tests/resources/rules/— unit tests for both resource functions.
Changed
- Breaking: Renamed the
Settingsfieldsfiles,use_ste100,
use_ste100_technical_words, anduse_ste100_rulestovocab_files,
use_asdste100_vocab,use_asdste100_technical_words, and
use_asdste100_rulesrespectively (settings.py). Because
Settings.model_configderives environment variable names from the
field name under theASDSTE100_MCP_prefix, this also renames the
corresponding environment variables:ASDSTE100_MCP_FILES→
ASDSTE100_MCP_VOCAB_FILES,ASDSTE100_MCP_USE_STE100→
ASDSTE100_MCP_USE_ASDSTE100_VOCAB,
ASDSTE100_MCP_USE_STE100_TECHNICAL_WORDS→
ASDSTE100_MCP_USE_ASDSTE100_TECHNICAL_WORDS, and
ASDSTE100_MCP_USE_STE100_RULES→ASDSTE100_MCP_USE_ASDSTE100_RULES.
Update any.envfile, shell environment, or deployment config that
sets these variables under their previous names.server.py's lifespan
function andtests/settings/test_factory.pywere updated accordingly. - Bumped the
biz-dfch-asdste100vocabruntime dependency from>=0.8.0
to>=0.8.1. - Updated README.md wording in the Authentication section to mention
resources alongside tools, and added a note about the MCP Inspector
sometimes failing to connect overstdio(usesseinstead).
Full Changelog: v2.0.0...v3.0.0
v2.0.0 WordNet Synonyms, MCP Registry Publishing & Breaking Rename
[2.0.0] - 2026-08-02
Added
- New
word_synonymread-only tool backed by thebiz-dfch-asdste100nlp
library'sNlpclass: looks up WordNet synsets for a word and cross-
references their lemma names against the ASD-STE100 Issue 9 vocabulary,
returning approved/rejected entries that are synonyms of the input word.
Registered intools/words/word_synonym.py, following the same
structure asword_find/word_fuzzy; the sharedNlpinstance is
created inserver.py's lifespan (_nlp/_get_nlp()), wrapping the
sameVocabinstance used by the other vocabulary tools. - Runtime dependency on
biz-dfch-asdste100nlp>=0.1.0inpyproject.toml. tests/tools/words/test_word_synonym.py— unit tests for the
Nlp.synonymlookup and theword_synonymtool function.- MCP Registry publishing support via new
publish-to-mcp-registryGitHub Actions job:- Automatically publishes server metadata to the official MCP Registry
- Uses GitHub OIDC authentication (zero secrets, consistent with PyPI Trusted Publishing)
- Auto-patches
server.jsonversion fields from git tag at publish time - Runs after PyPI publication succeeds in the CI workflow
server.jsonat repository root defining MCP Registry metadata:- Server identity:
io.github.dfch/biz-dfch-asdste100mcp(GitHub OIDC namespace) - PyPI package configuration with
biz-dfch-asdste100mcpidentifier - Documentation of all 8
ASDSTE100_MCP_*environment variables with format hints - Conforms to MCP Registry schema v2025-12-11
- Server identity:
- PyPI ownership verification marker in README.md long-description for registry discovery
Changed
- Updated release workflow documentation in README.md to include MCP Registry publishing step
- Added "MCP Registry Publishing" section in README.md with setup and verification instructions
- Breaking: Upgraded MCP dependency to version 2.0.0, requiring MCP protocol 2.0 or newer
- Breaking: Renamed the
word_similarvocabulary tool toword_fuzzyfor clarity
(tools/words/word_similar.py→tools/words/word_fuzzy.py). Any caller invoking the
tool by its previous name must switch toword_fuzzy. - Breaking: Renamed the console script entry point from
ste100-mcpto
asdste100-mcp([project.scripts]inpyproject.toml), and the MCP
server/Typer app name to match. Update any launch command, OpenCode
mcpconfig, or shell alias that invokesste100-mcpto use
asdste100-mcpinstead. - Breaking: Renamed all
STE100_MCP_*environment variables to
ASDSTE100_MCP_*(STE100_MCP_TRANSPORT,STE100_MCP_HOST,
STE100_MCP_PORT,STE100_MCP_FILES,STE100_MCP_USE_STE100,
STE100_MCP_USE_STE100_TECHNICAL_WORDS,STE100_MCP_RULES_FILES,
STE100_MCP_USE_STE100_RULES), matching theasdste100-mcpentry point
name (settings.py'senv_prefix,cli.py'senvvar=bindings, and
server.json). Update any.envfile, shell environment, or deployment
config that sets these variables under their previous names.
Full Changelog: v1.0.0...v2.0.0
v1.0.0 add pagination BREAKING CHANGE
[1.0.0] - 2026-08-01
Added
max_results(default 25) andoffset(default 0) pagination parameters
onrules_search,rules_examples,word_list, andword_match--
the four tools whose unpaginated result can grow large enough (over a
thousand items, forrules_examples; the full multi-thousand-entry
vocabulary, forword_list/word_match) that a full page is otherwise
ambiguous.- New
PagedResultbase model (src/biz/dfch/asdste100mcp/models/paged_result.py)
carrying the sharedtotal,offset,max_results, andtruncated
pagination fields, plus three tool-specific subclasses built on it:
SearchResult(rules_search,results: list[Rule]),
RulesExamplesResult(rules_examples,results: list[ContentItem]),
andWordResult(word_list/word_match,results: list[Word]).
truncatedtells callers whether a full page means "that's all the
matches" or "there are more -- call again with a higheroffset". src/biz/dfch/asdste100mcp/tools/_pagination.py-- sharedMaxResults/
Offsetparameter types and apaginate()slicing helper used by all
four paginated tools.
Changed
- Breaking:
rules_searchnow returns aSearchResultobject instead
of a barelist[Rule]; the page of matching rules is available at
result.results. - Breaking:
rules_examplesnow returns aRulesExamplesResult
object instead of a barelist[ContentItem]; the page of matching
content items is available atresult.results. - Breaking:
word_listandword_matchnow return aWordResult
object instead of a barelist[Word]; the page of matching vocabulary
entries is available atresult.results.
Full Changelog: v0.2.0...v1.0.0
v0.2.0 add rules
[0.2.0] - 2026-08-01
Added
- Eight
rules_*read-only tools backed by thebiz-dfch-asdste100ruleslibrary:
rules_find,rules_match,rules_search,rules_by_section,
rules_by_category,rules_examples,rules_overview,rules_toc.
Return types reuse the library's own pydantic models (Rule,
ContentItem,RuleOverview,ContentType,EntryType) directly; a
newTocEntrymodel wraps the plain tuples returned byRules.toc(). --rules-file / -rCLI option onste100-mcp(repeatable): pass one or
more rules JSON files at startup, merged withSTE100_MCP_RULES_FILES.Settings.rules_filesandSettings.use_ste100_rulesfields;
Factory.create_instance(extra_files, extra_rules_files)now also
merges rules file paths.tests/tools/rules/— unit tests for all eight new tools (viaRules
directly, following the existing tool-test convention).tests/models/test_toc_entry.py— unit tests for the newTocEntrymodel.- Python 3.14 to the list of supported and CI-tested versions.
Changed
- Renamed the five vocabulary tools with a
word_prefix and moved them
into a newtools/words/sub-package:word_find,word_match,
word_similar,word_list,word_count(wasfind,match,
similar,list,count). Breaking: any caller invoking the
tools by their previous names must switch to the newword_*names.
Full Changelog: v0.1.3...v0.2.0
v0.1.3 Maintenance
[0.1.3] - 2026-07-30
Changed
- Use new vocab package name:
biz-dfch-asdste100vocab.
Doc
- Fix README table formatting (pipe alignment in tool tables).
- Rename CI workflow from "Pylint and unittest" to "Lint and Test".
Full Changelog: v0.1.2...v0.1.3
v0.1.2 add file support for custom vocabulary
[0.1.2] - 2026-07-30
Added
--file / -fCLI option onste100-mcp(repeatable): pass one or more
*.jsonlvocabulary files at startup. Paths are merged with those from
STE100_MCP_FILES; duplicates are removed while preserving order.Factoryclass insettings.py— thread-safe singleton for
Settingsusing a double-checked lock. Class-level state removes the
need for a module-levelglobalvariable.Factory.create_instance(extra_files)— creates the singleton, merges
CLI-supplied paths with env-supplied paths, asserts it is called only once.Factory.get_instance()— returns the singleton, asserts
create_instancewas called first.
tests/settings/test_factory.py— 8 unit tests covering singleton
creation, identity, deduplication, and bothAssertionErrorguard paths.
Changed
cli.pycallsFactory.create_instance(files or [])beforemcp.run()
so CLI-supplied paths are available to the server lifespan.server.py_lifespancallsFactory.get_instance()instead of
constructing a newSettings()on every startup.
Fixed
- Removed bogus
--filevalidation block incli.pythat called
load_dotenvinstead of exiting on error (Typer'sexists=Truealready
rejects non-existent paths). - Changed
--filedefault from mutable[]toNoneto avoid the
mutable-default-argument footgun.
Full Changelog: v0.1.1...v0.1.2
v0.1.1 maintenance
[0.1.1] - 2026-07-30
Changed
- Extracted each MCP tool into its own module under the new
src/biz/dfch/asdste100mcp/tools/sub-package (find.py,match.py,
similar.py,list.py,count.py).server.pynow contains only the
shared infrastructure (mcp,_lifespan,_READ_ONLY,_Term,
_get_vocab) and imports thetoolspackage at the bottom to trigger
registration. All nine unit tests continue to pass unchanged. - Moved tool unit tests (
test_find.py,test_match.py,test_similar.py,
test_count.py) fromtests/into the newtests/tools/sub-package to
mirror the source layout. - Moved
test_word.pyfromtests/into the newtests/models/sub-package
to mirror the source layout.
Full Changelog: v0.1.0...v0.1.1
v0.1.0 initial release
0.1.0 - 2026-07-28
Added
- Initial project scaffold for
biz.dfch.AsdSte100Mcp. - AGPL-3.0-or-later license and SPDX headers in all Python source files.
- Runtime dependencies:
python-dotenv>=1.2.2,mcp,typer>=0.12,
pydantic-settings,biz-dfch-ste100vocab>=0.7.1. - Console script entrypoint
ste100-mcppointing tobiz.dfch.asdste100mcp.cli:app. MCPServerwith five read-only tools:find,match,similar,list,count;
backed by thebiz-dfch-ste100vocablibrary.- Typer CLI entry point with
--transport,--host, and--portoptions for
stdio and SSE transport modes. Settingsclass (settings.py) readingSTE100_MCP_*environment variables
viapydantic-settings.- Pydantic models
Word,WordMeaning,WordNoteinmodels/package,
mirroring the vocab library dataclasses. - Unit tests for all five tools in
tests/(one file per test class). - GitHub Actions CI workflow (
ci.yml) running ruff, pylint, and unit tests
across Python 3.11, 3.12, and 3.13. - GitHub Actions publish workflow (
publish.yml) building and publishing to
TestPyPI and PyPI on version tags, then creating a GitHub release. CONTRIBUTING.md,CODE_OF_CONDUCT.md,SECURITY.md, andNOTICE.CHANGELOG.mdfollowing the Keep a Changelog 1.0.0 format.
Fixed
- Replaced incorrect
dotenvdependency withpython-dotenv. - Corrected stale
biz.dfch.AsdSte100Vocabproject name references in
README.md,pyproject.toml,cli.py,__main__.py, and__init__.py. - Fixed TOML syntax error (missing comma in
classifiersarray inpyproject.toml). - Removed over-broad
pull-requests: writepermission from CI workflow. - Pinned
pypa/gh-action-pypi-publishfrom floatingrelease/v1tag to full
commit SHA. - Removed unnecessary single-entry
strategy/matrixfrom publish workflow jobs. - Fixed pylint warnings: added missing docstrings, moved
import osto top level
incli.py, and added targetedpylint: disablecomments inserver.pyfor
justified suppressions (invalid-name,global-statement,protected-access). - Replaced local editable path dependency on
biz-dfch-ste100vocabwith PyPI
reference to fix CI failure on GitHub Actions runners. - Let
uvmanage the Python version in CI by passingpython-versionto
astral-sh/setup-uvinstead of usingactions/setup-python.
Removed
- Removed
main.pyscaffold placeholder; the real entry point iscli.py.
Full Changelog: https://github.com/dfch/biz.dfch.AsdSte100Mcp/commits/v0.1.0