fip-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 (247) hide show
  1. fip_mcp-0.1.0/.github/workflows/ci.yml +25 -0
  2. fip_mcp-0.1.0/.github/workflows/publish-pypi.yml +91 -0
  3. fip_mcp-0.1.0/.gitignore +6 -0
  4. fip_mcp-0.1.0/CITATION.cff +33 -0
  5. fip_mcp-0.1.0/LICENSE +21 -0
  6. fip_mcp-0.1.0/PKG-INFO +120 -0
  7. fip_mcp-0.1.0/README.md +96 -0
  8. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__format__A__1.json +38 -0
  9. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__format__A__2.json +38 -0
  10. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__format__A__3.json +38 -0
  11. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__format__B__1.json +56 -0
  12. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__format__B__2.json +56 -0
  13. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__format__B__3.json +56 -0
  14. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__identifier__A__1.json +42 -0
  15. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__identifier__A__2.json +38 -0
  16. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__identifier__A__3.json +38 -0
  17. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__identifier__B__1.json +56 -0
  18. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__identifier__B__2.json +56 -0
  19. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__identifier__B__3.json +56 -0
  20. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__licence__A__1.json +38 -0
  21. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__licence__A__2.json +38 -0
  22. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__licence__A__3.json +38 -0
  23. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__licence__B__1.json +56 -0
  24. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__licence__B__2.json +56 -0
  25. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__licence__B__3.json +56 -0
  26. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__provenance__A__1.json +38 -0
  27. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__provenance__A__2.json +38 -0
  28. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__provenance__A__3.json +38 -0
  29. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__provenance__B__1.json +56 -0
  30. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__provenance__B__2.json +56 -0
  31. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__provenance__B__3.json +56 -0
  32. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__repository__A__1.json +38 -0
  33. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__repository__A__2.json +38 -0
  34. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__repository__A__3.json +38 -0
  35. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__repository__B__1.json +56 -0
  36. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__repository__B__2.json +56 -0
  37. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__repository__B__3.json +56 -0
  38. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__vocabulary__A__1.json +38 -0
  39. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__vocabulary__A__2.json +38 -0
  40. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__vocabulary__A__3.json +38 -0
  41. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__vocabulary__B__1.json +56 -0
  42. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__vocabulary__B__2.json +56 -0
  43. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-astro__vocabulary__B__3.json +56 -0
  44. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__format__A__1.json +36 -0
  45. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__format__A__2.json +36 -0
  46. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__format__A__3.json +36 -0
  47. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__format__B__1.json +54 -0
  48. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__format__B__2.json +54 -0
  49. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__format__B__3.json +54 -0
  50. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__identifier__A__1.json +38 -0
  51. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__identifier__A__2.json +38 -0
  52. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__identifier__A__3.json +38 -0
  53. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__identifier__B__1.json +56 -0
  54. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__identifier__B__2.json +56 -0
  55. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__identifier__B__3.json +56 -0
  56. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__licence__A__1.json +39 -0
  57. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__licence__A__2.json +39 -0
  58. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__licence__A__3.json +39 -0
  59. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__licence__B__1.json +57 -0
  60. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__licence__B__2.json +57 -0
  61. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__licence__B__3.json +57 -0
  62. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__provenance__A__1.json +36 -0
  63. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__provenance__A__2.json +36 -0
  64. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__provenance__A__3.json +36 -0
  65. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__provenance__B__1.json +54 -0
  66. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__provenance__B__2.json +54 -0
  67. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__provenance__B__3.json +54 -0
  68. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__repository__A__1.json +38 -0
  69. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__repository__A__2.json +38 -0
  70. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__repository__A__3.json +38 -0
  71. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__repository__B__1.json +56 -0
  72. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__repository__B__2.json +56 -0
  73. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__repository__B__3.json +56 -0
  74. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__vocabulary__A__1.json +36 -0
  75. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__vocabulary__A__2.json +36 -0
  76. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__vocabulary__A__3.json +36 -0
  77. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__vocabulary__B__1.json +54 -0
  78. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__vocabulary__B__2.json +54 -0
  79. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-bio__vocabulary__B__3.json +54 -0
  80. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__format__A__1.json +38 -0
  81. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__format__A__2.json +38 -0
  82. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__format__A__3.json +38 -0
  83. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__format__B__1.json +56 -0
  84. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__format__B__2.json +56 -0
  85. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__format__B__3.json +56 -0
  86. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__identifier__A__1.json +38 -0
  87. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__identifier__A__2.json +38 -0
  88. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__identifier__A__3.json +38 -0
  89. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__identifier__B__1.json +56 -0
  90. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__identifier__B__2.json +56 -0
  91. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__identifier__B__3.json +56 -0
  92. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__licence__A__1.json +38 -0
  93. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__licence__A__2.json +38 -0
  94. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__licence__A__3.json +38 -0
  95. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__licence__B__1.json +56 -0
  96. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__licence__B__2.json +56 -0
  97. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__licence__B__3.json +56 -0
  98. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__provenance__A__1.json +38 -0
  99. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__provenance__A__2.json +38 -0
  100. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__provenance__A__3.json +38 -0
  101. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__provenance__B__1.json +56 -0
  102. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__provenance__B__2.json +56 -0
  103. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__provenance__B__3.json +56 -0
  104. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__repository__A__1.json +39 -0
  105. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__repository__A__2.json +39 -0
  106. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__repository__A__3.json +39 -0
  107. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__repository__B__1.json +57 -0
  108. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__repository__B__2.json +57 -0
  109. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__repository__B__3.json +57 -0
  110. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__vocabulary__A__1.json +38 -0
  111. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__vocabulary__A__2.json +38 -0
  112. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__vocabulary__A__3.json +38 -0
  113. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__vocabulary__B__1.json +56 -0
  114. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__vocabulary__B__2.json +56 -0
  115. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/fiesta-eo__vocabulary__B__3.json +56 -0
  116. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/items.json +178 -0
  117. fip_mcp-0.1.0/eval/results/baseline-fips-2026-10-20/report.md +143 -0
  118. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__format__A__1.json +39 -0
  119. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__format__A__2.json +39 -0
  120. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__format__A__3.json +39 -0
  121. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__format__B__1.json +57 -0
  122. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__format__B__2.json +57 -0
  123. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__format__B__3.json +57 -0
  124. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__identifier__A__1.json +39 -0
  125. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__identifier__A__2.json +39 -0
  126. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__identifier__A__3.json +39 -0
  127. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__identifier__B__1.json +57 -0
  128. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__identifier__B__2.json +57 -0
  129. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__identifier__B__3.json +57 -0
  130. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__licence__A__1.json +39 -0
  131. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__licence__A__2.json +39 -0
  132. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__licence__A__3.json +39 -0
  133. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__licence__B__1.json +57 -0
  134. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__licence__B__2.json +57 -0
  135. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__licence__B__3.json +57 -0
  136. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__provenance__A__1.json +39 -0
  137. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__provenance__A__2.json +39 -0
  138. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__provenance__A__3.json +39 -0
  139. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__provenance__B__1.json +57 -0
  140. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__provenance__B__2.json +57 -0
  141. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__provenance__B__3.json +57 -0
  142. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__repository__A__1.json +39 -0
  143. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__repository__A__2.json +39 -0
  144. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__repository__A__3.json +39 -0
  145. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__repository__B__1.json +57 -0
  146. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__repository__B__2.json +57 -0
  147. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__repository__B__3.json +57 -0
  148. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__vocabulary__A__1.json +39 -0
  149. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__vocabulary__A__2.json +39 -0
  150. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__vocabulary__A__3.json +39 -0
  151. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__vocabulary__B__1.json +57 -0
  152. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__vocabulary__B__2.json +57 -0
  153. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-astro__vocabulary__B__3.json +57 -0
  154. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__format__A__1.json +37 -0
  155. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__format__A__2.json +37 -0
  156. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__format__A__3.json +37 -0
  157. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__format__B__1.json +56 -0
  158. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__format__B__2.json +56 -0
  159. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__format__B__3.json +55 -0
  160. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__identifier__A__1.json +39 -0
  161. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__identifier__A__2.json +39 -0
  162. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__identifier__A__3.json +39 -0
  163. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__identifier__B__1.json +57 -0
  164. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__identifier__B__2.json +57 -0
  165. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__identifier__B__3.json +57 -0
  166. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__licence__A__1.json +40 -0
  167. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__licence__A__2.json +40 -0
  168. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__licence__A__3.json +40 -0
  169. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__licence__B__1.json +58 -0
  170. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__licence__B__2.json +58 -0
  171. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__licence__B__3.json +58 -0
  172. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__provenance__A__1.json +37 -0
  173. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__provenance__A__2.json +37 -0
  174. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__provenance__A__3.json +37 -0
  175. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__provenance__B__1.json +56 -0
  176. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__provenance__B__2.json +56 -0
  177. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__provenance__B__3.json +56 -0
  178. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__repository__A__1.json +39 -0
  179. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__repository__A__2.json +39 -0
  180. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__repository__A__3.json +39 -0
  181. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__repository__B__1.json +58 -0
  182. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__repository__B__2.json +58 -0
  183. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__repository__B__3.json +57 -0
  184. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__vocabulary__A__1.json +37 -0
  185. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__vocabulary__A__2.json +37 -0
  186. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__vocabulary__A__3.json +37 -0
  187. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__vocabulary__B__1.json +55 -0
  188. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__vocabulary__B__2.json +55 -0
  189. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-bio__vocabulary__B__3.json +55 -0
  190. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__format__A__1.json +39 -0
  191. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__format__A__2.json +39 -0
  192. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__format__A__3.json +39 -0
  193. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__format__B__1.json +57 -0
  194. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__format__B__2.json +57 -0
  195. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__format__B__3.json +57 -0
  196. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__identifier__A__1.json +39 -0
  197. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__identifier__A__2.json +39 -0
  198. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__identifier__A__3.json +39 -0
  199. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__identifier__B__1.json +57 -0
  200. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__identifier__B__2.json +57 -0
  201. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__identifier__B__3.json +57 -0
  202. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__licence__A__1.json +39 -0
  203. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__licence__A__2.json +39 -0
  204. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__licence__A__3.json +39 -0
  205. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__licence__B__1.json +57 -0
  206. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__licence__B__2.json +57 -0
  207. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__licence__B__3.json +57 -0
  208. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__provenance__A__1.json +39 -0
  209. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__provenance__A__2.json +39 -0
  210. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__provenance__A__3.json +39 -0
  211. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__provenance__B__1.json +57 -0
  212. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__provenance__B__2.json +57 -0
  213. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__provenance__B__3.json +57 -0
  214. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__repository__A__1.json +40 -0
  215. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__repository__A__2.json +40 -0
  216. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__repository__A__3.json +40 -0
  217. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__repository__B__1.json +58 -0
  218. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__repository__B__2.json +58 -0
  219. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__repository__B__3.json +58 -0
  220. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__vocabulary__A__1.json +39 -0
  221. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__vocabulary__A__2.json +39 -0
  222. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__vocabulary__A__3.json +39 -0
  223. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__vocabulary__B__1.json +57 -0
  224. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__vocabulary__B__2.json +57 -0
  225. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/fiesta-eo__vocabulary__B__3.json +57 -0
  226. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/items.json +196 -0
  227. fip_mcp-0.1.0/eval/results/plain-fips-2026-10-20/report.md +143 -0
  228. fip_mcp-0.1.0/eval/results/smoke/fiesta-bio__format__A__1.json +36 -0
  229. fip_mcp-0.1.0/eval/results/smoke/fiesta-bio__format__B__1.json +54 -0
  230. fip_mcp-0.1.0/eval/results/smoke/items.json +10 -0
  231. fip_mcp-0.1.0/eval/results/smoke/report.md +31 -0
  232. fip_mcp-0.1.0/eval/run_eval.py +146 -0
  233. fip_mcp-0.1.0/eval/score.py +138 -0
  234. fip_mcp-0.1.0/pyproject.toml +40 -0
  235. fip_mcp-0.1.0/server.json +22 -0
  236. fip_mcp-0.1.0/src/fip_mcp/__init__.py +3 -0
  237. fip_mcp-0.1.0/src/fip_mcp/checks.py +187 -0
  238. fip_mcp-0.1.0/src/fip_mcp/cli.py +30 -0
  239. fip_mcp-0.1.0/src/fip_mcp/crosswalk.py +58 -0
  240. fip_mcp-0.1.0/src/fip_mcp/data/communities.json +6 -0
  241. fip_mcp-0.1.0/src/fip_mcp/fip.py +189 -0
  242. fip_mcp-0.1.0/src/fip_mcp/nanopub.py +100 -0
  243. fip_mcp-0.1.0/src/fip_mcp/questions.py +77 -0
  244. fip_mcp-0.1.0/src/fip_mcp/server.py +104 -0
  245. fip_mcp-0.1.0/src/fip_mcp/service.py +86 -0
  246. fip_mcp-0.1.0/src/fip_mcp/target.py +133 -0
  247. fip_mcp-0.1.0/tests/test_offline.py +122 -0
@@ -0,0 +1,25 @@
1
+ name: tests
2
+
3
+ # The suite is hermetic: FIPs are built in-process from fixtures, so CI needs no
4
+ # network and stays green when the nanopublication network is down.
5
+
6
+ on:
7
+ push:
8
+ branches: [main]
9
+ pull_request:
10
+ workflow_dispatch:
11
+
12
+ jobs:
13
+ test:
14
+ runs-on: ubuntu-latest
15
+ strategy:
16
+ fail-fast: false
17
+ matrix:
18
+ python-version: ["3.10", "3.12"]
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+ - uses: actions/setup-python@v5
22
+ with:
23
+ python-version: ${{ matrix.python-version }}
24
+ - run: python -m pip install -e '.[dev]'
25
+ - run: python -m pytest -q
@@ -0,0 +1,91 @@
1
+ name: Publish to PyPI
2
+
3
+ # Release automation. Trigger by pushing a version tag — one push does everything:
4
+ # # bump version in pyproject.toml + src/fip_mcp/__init__.py, commit to main, then:
5
+ # git tag v0.1.0
6
+ # git push origin v0.1.0
7
+ # -> builds sdist+wheel, smoke-tests, CREATES the GitHub Release (auto notes + artefacts),
8
+ # and PUBLISHES to PyPI via Trusted Publishing (OIDC — no API token stored in the repo).
9
+ #
10
+ # Still supported: publishing on a manually-created GitHub Release (release: published) and a
11
+ # manual workflow_dispatch. A Release created by this workflow's GITHUB_TOKEN does NOT re-trigger
12
+ # `release: published`, so tagging never double-publishes.
13
+ #
14
+ # NOTE: PyPI Trusted Publishing matches the *workflow filename* — keep this file named
15
+ # `publish-pypi.yml`. One-time setup on PyPI (pypi.org -> account -> Publishing -> Add a pending
16
+ # publisher), before the first release:
17
+ # PyPI project name : fip-mcp
18
+ # Owner : ScienceLiveHub
19
+ # Repository name : fip-mcp
20
+ # Workflow name : publish-pypi.yml
21
+ # Environment name : pypi
22
+
23
+ on:
24
+ push:
25
+ tags: ["v*"]
26
+ release:
27
+ types: [published]
28
+ workflow_dispatch:
29
+
30
+ jobs:
31
+ build:
32
+ runs-on: ubuntu-latest
33
+ steps:
34
+ - uses: actions/checkout@v4
35
+ - uses: actions/setup-python@v5
36
+ with:
37
+ python-version: "3.12"
38
+ - name: Build sdist + wheel
39
+ run: |
40
+ python -m pip install --upgrade build
41
+ python -m build
42
+ # Offline smoke test: the installed wheel must expose its tools and load. It
43
+ # deliberately hits no network, so a release is never blocked by an upstream
44
+ # outage.
45
+ - name: Smoke-check the installed wheel
46
+ run: |
47
+ python -m pip install dist/*.whl
48
+ python - <<'PY'
49
+ import asyncio
50
+ import fip_mcp as f
51
+ from fip_mcp.server import mcp
52
+ names = {t.name for t in asyncio.run(mcp.list_tools())}
53
+ assert {"communities", "profile", "recommend", "check", "crosswalk"} <= names, names
54
+ print("ok", f.__version__, sorted(names))
55
+ PY
56
+ - uses: actions/upload-artifact@v4
57
+ with:
58
+ name: dist
59
+ path: dist/
60
+
61
+ # Create the GitHub Release when a version tag is pushed (auto-generated notes + built
62
+ # artefacts). Skipped when triggered by an already-published Release or a manual dispatch.
63
+ github-release:
64
+ if: startsWith(github.ref, 'refs/tags/v')
65
+ needs: build
66
+ runs-on: ubuntu-latest
67
+ permissions:
68
+ contents: write
69
+ steps:
70
+ - uses: actions/download-artifact@v4
71
+ with:
72
+ name: dist
73
+ path: dist/
74
+ - name: Create GitHub Release
75
+ uses: softprops/action-gh-release@v2
76
+ with:
77
+ generate_release_notes: true
78
+ files: dist/*
79
+
80
+ publish:
81
+ needs: build
82
+ runs-on: ubuntu-latest
83
+ environment: pypi
84
+ permissions:
85
+ id-token: write # required for trusted publishing
86
+ steps:
87
+ - uses: actions/download-artifact@v4
88
+ with:
89
+ name: dist
90
+ path: dist/
91
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,6 @@
1
+ .venv/
2
+ __pycache__/
3
+ *.egg-info/
4
+ .pytest_cache/
5
+ dist/
6
+ build/
@@ -0,0 +1,33 @@
1
+ cff-version: 1.2.0
2
+ title: fip-mcp
3
+ message: >-
4
+ If you use fip-mcp, please cite it using the metadata in this file.
5
+ type: software
6
+ authors:
7
+ - family-names: Fouilloux
8
+ given-names: Anne
9
+ orcid: https://orcid.org/0000-0002-1784-2920
10
+ affiliation: LifeWatch ERIC
11
+ repository-code: https://github.com/ScienceLiveHub/fip-mcp
12
+ url: https://sciencelive4all.org
13
+ abstract: >-
14
+ An MCP server that turns community FAIR Implementation Profiles (FIPs),
15
+ published as nanopublications, into guidance and deterministic compliance
16
+ checks for AI agents. An agent asks the FIP what the community agreed before
17
+ it suggests a repository, format, licence or vocabulary, and can check a
18
+ folder or a Zenodo record against the FIP. Verdicts are computed by code;
19
+ resources that cannot be tested are reported as manual, and questions the
20
+ community left open are reported as gaps. Developed in the OSCARS-FIESTA
21
+ project (EU Horizon Europe grant 101129751) and maintained by the Science
22
+ Live community.
23
+ keywords:
24
+ - FAIR
25
+ - FAIR Implementation Profile
26
+ - FIP
27
+ - nanopublications
28
+ - research data management
29
+ - MCP
30
+ - AI agents
31
+ - Science Live
32
+ license: MIT
33
+ version: 0.1.0
fip_mcp-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Anne Fouilloux
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
fip_mcp-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,120 @@
1
+ Metadata-Version: 2.5
2
+ Name: fip-mcp
3
+ Version: 0.1.0
4
+ Summary: MCP server that turns FAIR Implementation Profiles into guidance and deterministic compliance checks for AI agents.
5
+ Project-URL: Homepage, https://github.com/ScienceLiveHub/fip-mcp
6
+ Project-URL: Repository, https://github.com/ScienceLiveHub/fip-mcp
7
+ Project-URL: FIP Ontology, https://w3id.org/fair/fip/terms/FIP-Ontology
8
+ Project-URL: Science Live, https://sciencelive4all.org
9
+ Author: Anne Fouilloux
10
+ License: MIT
11
+ License-File: LICENSE
12
+ Keywords: FAIR,FAIR Implementation Profile,FIP,mcp,nanopublication,research-data,science-live
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Topic :: Scientific/Engineering
18
+ Requires-Python: >=3.10
19
+ Requires-Dist: mcp<2,>=1.2.0
20
+ Requires-Dist: rdflib>=7
21
+ Provides-Extra: dev
22
+ Requires-Dist: pytest>=8; extra == 'dev'
23
+ Description-Content-Type: text/markdown
24
+
25
+ # fip-mcp
26
+
27
+ <!-- mcp-name: org.sciencelive4all/fip-mcp -->
28
+
29
+ An MCP server that turns community **FAIR Implementation Profiles (FIPs)** into
30
+ guidance and deterministic compliance checks for AI agents such as Claude Code.
31
+
32
+ A FIP records a community's agreed FAIR choices: identifiers, repositories, formats,
33
+ vocabularies, licences and provenance models. It is published as nanopublications
34
+ by the [FIP Wizard](https://fip.fair-wizard.com). Today FIPs are mostly filled in
35
+ once and rarely read again. This server makes them operational. An agent helping a
36
+ researcher asks the FIP what the community agreed before it suggests anything, and
37
+ can check work against the FIP.
38
+
39
+ fip-mcp was developed in the [OSCARS](https://oscars-project.eu)-funded
40
+ **FIESTA** project (*FAIR Image Data Workflows in Galaxy*), and is maintained by
41
+ the [Science Live](https://sciencelive4all.org) community.
42
+
43
+ ## Tools
44
+
45
+ | Tool | What it does |
46
+ |---|---|
47
+ | `communities` | Known communities and their FIP nanopubs (any tool also accepts a FIP URI). |
48
+ | `profile` | The community's choices question by question, from the **latest** FIP version. |
49
+ | `recommend` | What the community agreed for a topic (`format`, `repository`, `licence`, …). |
50
+ | `check` | Checks a folder or Zenodo record against the FIP: `pass` / `fail` (+ `fix`) / `manual` / `no-choice`. |
51
+ | `crosswalk` | What changes when a workflow or dataset moves between two communities. |
52
+
53
+ Design rules:
54
+
55
+ - **Verdicts are code, not LLM judgement.** Each declared resource maps to a probe
56
+ of facts read from the target. A resource with no probe is `manual`, so the agent
57
+ asks the user instead of guessing.
58
+ - **A community gap stays a gap.** `no-choice` is reported as a gap in the FIP, and
59
+ the agent is told not to put its own preference in its place.
60
+ - **Latest version.** The FIP Wizard republishes a FIP *and* its declaration index,
61
+ and both supersede their predecessors. The resolver only follows successors that
62
+ are themselves FIPs.
63
+
64
+ ## Install and use
65
+
66
+ ```bash
67
+ pipx install fip-mcp
68
+ claude mcp add fip -s user -- fip-mcp # as an MCP server
69
+ fip-check check fiesta-eo 10.5281/zenodo.20960690 # same operations from the shell
70
+ fip-check crosswalk fiesta-bio fiesta-eo
71
+ ```
72
+
73
+ Nanopubs are cached in `~/.cache/fip-mcp`. They are immutable, so they are cached
74
+ for good. Version lookups always go to the network.
75
+
76
+ For development: `pip install -e '.[dev]'` and `python -m pytest -q` (the tests need
77
+ no network).
78
+
79
+ ## Status
80
+
81
+ Prototype. The short names in `src/fip_mcp/data` cover the Astronomy, Bioimaging
82
+ and Earth Observation FIPs of the OSCARS-FIESTA community *FAIR Image Data Workflows
83
+ in Galaxy*. Any tool also accepts the nanopublication URI of another FIP, but the
84
+ `check` probes have so far only been exercised on FIESTA outputs.
85
+
86
+ ## Assistant test
87
+
88
+ `eval/` tests whether an AI assistant follows a community's FIP, with and without
89
+ fip-mcp. It asks 6 questions (repository, data format, licence, identifier,
90
+ vocabulary, provenance) for each of the 3 FIESTA communities, 3 runs per condition.
91
+ The expected answers are read from the published FIPs, not typed by hand. Results
92
+ from 2026-10-20 (Claude Opus 5.5, web and file tools disabled) are in
93
+ `eval/results/`:
94
+
95
+ | Variant | Without fip-mcp | With fip-mcp |
96
+ |---|---|---|
97
+ | *choice*: "what has my community agreed?" | 54 of 54 abstain | 54 of 54 give the declared choice or report the gap |
98
+ | *plain*: "what do you recommend?", declared questions | 30 of 45 on-profile, 15 off-profile | 45 of 45 on-profile |
99
+ | *plain*: questions the community left open | 9 of 9 recommend their own default, with a caveat | 9 of 9 report the gap |
100
+
101
+ ```bash
102
+ python eval/run_eval.py --runs 3 --out eval/results/<name> # needs Claude Code
103
+ python eval/score.py eval/results/<name>
104
+ ```
105
+
106
+ ## Citation
107
+
108
+ Please cite fip-mcp with the metadata in [`CITATION.cff`](CITATION.cff).
109
+
110
+ ## Funding
111
+
112
+ fip-mcp was developed within **FIESTA**, a project funded by OSCARS (*Open Science
113
+ Clusters' Action for Research and Society*). OSCARS is funded by the European
114
+ Union's Horizon Europe programme under grant agreement No 101129751. Views and
115
+ opinions expressed are those of the authors only and do not necessarily reflect
116
+ those of the European Union. Neither the European Union nor the granting authority
117
+ can be held responsible for them.
118
+
119
+ Science Live is a community-driven, unfunded initiative. Further funders will be
120
+ listed here as they support the work.
@@ -0,0 +1,96 @@
1
+ # fip-mcp
2
+
3
+ <!-- mcp-name: org.sciencelive4all/fip-mcp -->
4
+
5
+ An MCP server that turns community **FAIR Implementation Profiles (FIPs)** into
6
+ guidance and deterministic compliance checks for AI agents such as Claude Code.
7
+
8
+ A FIP records a community's agreed FAIR choices: identifiers, repositories, formats,
9
+ vocabularies, licences and provenance models. It is published as nanopublications
10
+ by the [FIP Wizard](https://fip.fair-wizard.com). Today FIPs are mostly filled in
11
+ once and rarely read again. This server makes them operational. An agent helping a
12
+ researcher asks the FIP what the community agreed before it suggests anything, and
13
+ can check work against the FIP.
14
+
15
+ fip-mcp was developed in the [OSCARS](https://oscars-project.eu)-funded
16
+ **FIESTA** project (*FAIR Image Data Workflows in Galaxy*), and is maintained by
17
+ the [Science Live](https://sciencelive4all.org) community.
18
+
19
+ ## Tools
20
+
21
+ | Tool | What it does |
22
+ |---|---|
23
+ | `communities` | Known communities and their FIP nanopubs (any tool also accepts a FIP URI). |
24
+ | `profile` | The community's choices question by question, from the **latest** FIP version. |
25
+ | `recommend` | What the community agreed for a topic (`format`, `repository`, `licence`, …). |
26
+ | `check` | Checks a folder or Zenodo record against the FIP: `pass` / `fail` (+ `fix`) / `manual` / `no-choice`. |
27
+ | `crosswalk` | What changes when a workflow or dataset moves between two communities. |
28
+
29
+ Design rules:
30
+
31
+ - **Verdicts are code, not LLM judgement.** Each declared resource maps to a probe
32
+ of facts read from the target. A resource with no probe is `manual`, so the agent
33
+ asks the user instead of guessing.
34
+ - **A community gap stays a gap.** `no-choice` is reported as a gap in the FIP, and
35
+ the agent is told not to put its own preference in its place.
36
+ - **Latest version.** The FIP Wizard republishes a FIP *and* its declaration index,
37
+ and both supersede their predecessors. The resolver only follows successors that
38
+ are themselves FIPs.
39
+
40
+ ## Install and use
41
+
42
+ ```bash
43
+ pipx install fip-mcp
44
+ claude mcp add fip -s user -- fip-mcp # as an MCP server
45
+ fip-check check fiesta-eo 10.5281/zenodo.20960690 # same operations from the shell
46
+ fip-check crosswalk fiesta-bio fiesta-eo
47
+ ```
48
+
49
+ Nanopubs are cached in `~/.cache/fip-mcp`. They are immutable, so they are cached
50
+ for good. Version lookups always go to the network.
51
+
52
+ For development: `pip install -e '.[dev]'` and `python -m pytest -q` (the tests need
53
+ no network).
54
+
55
+ ## Status
56
+
57
+ Prototype. The short names in `src/fip_mcp/data` cover the Astronomy, Bioimaging
58
+ and Earth Observation FIPs of the OSCARS-FIESTA community *FAIR Image Data Workflows
59
+ in Galaxy*. Any tool also accepts the nanopublication URI of another FIP, but the
60
+ `check` probes have so far only been exercised on FIESTA outputs.
61
+
62
+ ## Assistant test
63
+
64
+ `eval/` tests whether an AI assistant follows a community's FIP, with and without
65
+ fip-mcp. It asks 6 questions (repository, data format, licence, identifier,
66
+ vocabulary, provenance) for each of the 3 FIESTA communities, 3 runs per condition.
67
+ The expected answers are read from the published FIPs, not typed by hand. Results
68
+ from 2026-10-20 (Claude Opus 5.5, web and file tools disabled) are in
69
+ `eval/results/`:
70
+
71
+ | Variant | Without fip-mcp | With fip-mcp |
72
+ |---|---|---|
73
+ | *choice*: "what has my community agreed?" | 54 of 54 abstain | 54 of 54 give the declared choice or report the gap |
74
+ | *plain*: "what do you recommend?", declared questions | 30 of 45 on-profile, 15 off-profile | 45 of 45 on-profile |
75
+ | *plain*: questions the community left open | 9 of 9 recommend their own default, with a caveat | 9 of 9 report the gap |
76
+
77
+ ```bash
78
+ python eval/run_eval.py --runs 3 --out eval/results/<name> # needs Claude Code
79
+ python eval/score.py eval/results/<name>
80
+ ```
81
+
82
+ ## Citation
83
+
84
+ Please cite fip-mcp with the metadata in [`CITATION.cff`](CITATION.cff).
85
+
86
+ ## Funding
87
+
88
+ fip-mcp was developed within **FIESTA**, a project funded by OSCARS (*Open Science
89
+ Clusters' Action for Research and Society*). OSCARS is funded by the European
90
+ Union's Horizon Europe programme under grant agreement No 101129751. Views and
91
+ opinions expressed are those of the authors only and do not necessarily reflect
92
+ those of the European Union. Neither the European Union nor the granting authority
93
+ can be held responsible for them.
94
+
95
+ Science Live is a community-driven, unfunded initiative. Further funders will be
96
+ listed here as they support the work.
@@ -0,0 +1,38 @@
1
+ {
2
+ "id": "fiesta-astro:format",
3
+ "community": "fiesta-astro",
4
+ "topic": "format",
5
+ "question": "I1-D",
6
+ "expected": [
7
+ "Flexible Image Transport System"
8
+ ],
9
+ "prompt": "I'm a researcher in the FIESTA Astronomy community (part of the 'FAIR Image Data Workflows in Galaxy' community). Which file format should I use for my image datasets?\n\nAnswer briefly. On the last line write exactly one of:\nCOMMUNITY_CHOICE: <the resource(s) my community has agreed on, comma-separated>\nCOMMUNITY_CHOICE: NOT_DECLARED (my community has explicitly not agreed on one)\nCOMMUNITY_CHOICE: DONT_KNOW (you cannot tell what my community agreed)",
10
+ "condition": "A",
11
+ "run": 1,
12
+ "model": "claude-opus-5-5",
13
+ "toolsAvailable": [
14
+ "CronCreate",
15
+ "CronDelete",
16
+ "CronList",
17
+ "DesignSync",
18
+ "EnterWorktree",
19
+ "ExitWorktree",
20
+ "ListAgents",
21
+ "Monitor",
22
+ "PushNotification",
23
+ "RemoteTrigger",
24
+ "ReportFindings",
25
+ "ScheduleWakeup",
26
+ "SendMessage",
27
+ "TaskStop",
28
+ "ToolSearch",
29
+ "Workflow"
30
+ ],
31
+ "mcpServers": [],
32
+ "toolCalls": [],
33
+ "answer": "Astronomy image data is usually stored as **FITS** (Flexible Image Transport System). It's the IAU-endorsed standard, Galaxy's astronomy tools support it, and it keeps the metadata (WCS, observation headers) inside the file. For general bioimage-style workflows in the wider \"FAIR Image Data Workflows in Galaxy\" effort, **OME-TIFF** or **OME-Zarr** are the common choices.\n\nI can't see any declaration, such as a FAIR Implementation Profile, showing which format the FIESTA Astronomy community has formally agreed on. FITS is my best guess, not a confirmed community decision. Check your community's FIP or ask its coordinators.\n\nCOMMUNITY_CHOICE: DONT_KNOW",
34
+ "isError": false,
35
+ "costUsd": 0.030035200000000005,
36
+ "seconds": 6.6,
37
+ "stderr": ""
38
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "id": "fiesta-astro:format",
3
+ "community": "fiesta-astro",
4
+ "topic": "format",
5
+ "question": "I1-D",
6
+ "expected": [
7
+ "Flexible Image Transport System"
8
+ ],
9
+ "prompt": "I'm a researcher in the FIESTA Astronomy community (part of the 'FAIR Image Data Workflows in Galaxy' community). Which file format should I use for my image datasets?\n\nAnswer briefly. On the last line write exactly one of:\nCOMMUNITY_CHOICE: <the resource(s) my community has agreed on, comma-separated>\nCOMMUNITY_CHOICE: NOT_DECLARED (my community has explicitly not agreed on one)\nCOMMUNITY_CHOICE: DONT_KNOW (you cannot tell what my community agreed)",
10
+ "condition": "A",
11
+ "run": 2,
12
+ "model": "claude-opus-5-5",
13
+ "toolsAvailable": [
14
+ "CronCreate",
15
+ "CronDelete",
16
+ "CronList",
17
+ "DesignSync",
18
+ "EnterWorktree",
19
+ "ExitWorktree",
20
+ "ListAgents",
21
+ "Monitor",
22
+ "PushNotification",
23
+ "RemoteTrigger",
24
+ "ReportFindings",
25
+ "ScheduleWakeup",
26
+ "SendMessage",
27
+ "TaskStop",
28
+ "ToolSearch",
29
+ "Workflow"
30
+ ],
31
+ "mcpServers": [],
32
+ "toolCalls": [],
33
+ "answer": "For astronomy image data, **FITS** (Flexible Image Transport System) is the usual choice. It's the IAU-endorsed standard, it stores metadata in its headers (including WCS coordinates), and Galaxy's astronomy tools support it. If your Galaxy imaging workflows also reach into bioimaging-style tools, OME-TIFF or OME-Zarr are the common open formats there.\n\nHowever, I can't see the FAIR Implementation Profile (FIP) for FIESTA Astronomy or for the \"FAIR Image Data Workflows in Galaxy\" community, so I can't confirm which format your community formally declared. Check your community's published FIP, for example on the FIP Wizard or as FAIR Enabling Resource nanopublications.\n\nCOMMUNITY_CHOICE: DONT_KNOW",
34
+ "isError": false,
35
+ "costUsd": 0.0324712,
36
+ "seconds": 8.2,
37
+ "stderr": ""
38
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "id": "fiesta-astro:format",
3
+ "community": "fiesta-astro",
4
+ "topic": "format",
5
+ "question": "I1-D",
6
+ "expected": [
7
+ "Flexible Image Transport System"
8
+ ],
9
+ "prompt": "I'm a researcher in the FIESTA Astronomy community (part of the 'FAIR Image Data Workflows in Galaxy' community). Which file format should I use for my image datasets?\n\nAnswer briefly. On the last line write exactly one of:\nCOMMUNITY_CHOICE: <the resource(s) my community has agreed on, comma-separated>\nCOMMUNITY_CHOICE: NOT_DECLARED (my community has explicitly not agreed on one)\nCOMMUNITY_CHOICE: DONT_KNOW (you cannot tell what my community agreed)",
10
+ "condition": "A",
11
+ "run": 3,
12
+ "model": "claude-opus-5-5",
13
+ "toolsAvailable": [
14
+ "CronCreate",
15
+ "CronDelete",
16
+ "CronList",
17
+ "DesignSync",
18
+ "EnterWorktree",
19
+ "ExitWorktree",
20
+ "ListAgents",
21
+ "Monitor",
22
+ "PushNotification",
23
+ "RemoteTrigger",
24
+ "ReportFindings",
25
+ "ScheduleWakeup",
26
+ "SendMessage",
27
+ "TaskStop",
28
+ "ToolSearch",
29
+ "Workflow"
30
+ ],
31
+ "mcpServers": [],
32
+ "toolCalls": [],
33
+ "answer": "FITS is the usual format for astronomical image data. It's an IAU-endorsed standard, it keeps metadata in its headers, and Galaxy and most astronomy tools support it well. Many imaging workflows also convert to OME-TIFF or OME-Zarr when they need to work with general bioimage tools.\n\nI don't have a record of what the FIESTA Astronomy community formally agreed in its FAIR Implementation Profile, and I couldn't look it up from here. So FITS is a sensible default, not a confirmed community decision. Check your community's FIP on the FIP Wizard or FAIR Connect to see what it actually declared.\n\nCOMMUNITY_CHOICE: DONT_KNOW",
34
+ "isError": false,
35
+ "costUsd": 0.0303592,
36
+ "seconds": 6.4,
37
+ "stderr": ""
38
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "id": "fiesta-astro:format",
3
+ "community": "fiesta-astro",
4
+ "topic": "format",
5
+ "question": "I1-D",
6
+ "expected": [
7
+ "Flexible Image Transport System"
8
+ ],
9
+ "prompt": "I'm a researcher in the FIESTA Astronomy community (part of the 'FAIR Image Data Workflows in Galaxy' community). Which file format should I use for my image datasets?\n\nAnswer briefly. On the last line write exactly one of:\nCOMMUNITY_CHOICE: <the resource(s) my community has agreed on, comma-separated>\nCOMMUNITY_CHOICE: NOT_DECLARED (my community has explicitly not agreed on one)\nCOMMUNITY_CHOICE: DONT_KNOW (you cannot tell what my community agreed)",
10
+ "condition": "B",
11
+ "run": 1,
12
+ "model": "claude-opus-5-5",
13
+ "toolsAvailable": [
14
+ "CronCreate",
15
+ "CronDelete",
16
+ "CronList",
17
+ "DesignSync",
18
+ "EnterWorktree",
19
+ "ExitWorktree",
20
+ "ListAgents",
21
+ "ListMcpResourcesTool",
22
+ "Monitor",
23
+ "PushNotification",
24
+ "ReadMcpResourceDirTool",
25
+ "ReadMcpResourceTool",
26
+ "RemoteTrigger",
27
+ "ReportFindings",
28
+ "ScheduleWakeup",
29
+ "SendMessage",
30
+ "TaskStop",
31
+ "ToolSearch",
32
+ "Workflow",
33
+ "mcp__fip__check",
34
+ "mcp__fip__communities",
35
+ "mcp__fip__crosswalk",
36
+ "mcp__fip__profile",
37
+ "mcp__fip__recommend"
38
+ ],
39
+ "mcpServers": [
40
+ {
41
+ "name": "fip",
42
+ "status": "connected",
43
+ "source": "dynamic"
44
+ }
45
+ ],
46
+ "toolCalls": [
47
+ "ToolSearch",
48
+ "mcp__fip__communities",
49
+ "mcp__fip__recommend"
50
+ ],
51
+ "answer": "Use **FITS (Flexible Image Transport System)** for your image datasets. It's the data format the FIESTA Astronomy community chose in its latest FAIR Implementation Profile (question I1\u2011D). FITS was built for scientific imaging in astronomy, so it can record photometric and spatial calibration information along with the image.\n\nFor metadata records, the same profile lists XML and RDF.\n\nCOMMUNITY_CHOICE: Flexible Image Transport System (FITS)",
52
+ "isError": false,
53
+ "costUsd": 0.057587,
54
+ "seconds": 8.3,
55
+ "stderr": ""
56
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "id": "fiesta-astro:format",
3
+ "community": "fiesta-astro",
4
+ "topic": "format",
5
+ "question": "I1-D",
6
+ "expected": [
7
+ "Flexible Image Transport System"
8
+ ],
9
+ "prompt": "I'm a researcher in the FIESTA Astronomy community (part of the 'FAIR Image Data Workflows in Galaxy' community). Which file format should I use for my image datasets?\n\nAnswer briefly. On the last line write exactly one of:\nCOMMUNITY_CHOICE: <the resource(s) my community has agreed on, comma-separated>\nCOMMUNITY_CHOICE: NOT_DECLARED (my community has explicitly not agreed on one)\nCOMMUNITY_CHOICE: DONT_KNOW (you cannot tell what my community agreed)",
10
+ "condition": "B",
11
+ "run": 2,
12
+ "model": "claude-opus-5-5",
13
+ "toolsAvailable": [
14
+ "CronCreate",
15
+ "CronDelete",
16
+ "CronList",
17
+ "DesignSync",
18
+ "EnterWorktree",
19
+ "ExitWorktree",
20
+ "ListAgents",
21
+ "ListMcpResourcesTool",
22
+ "Monitor",
23
+ "PushNotification",
24
+ "ReadMcpResourceDirTool",
25
+ "ReadMcpResourceTool",
26
+ "RemoteTrigger",
27
+ "ReportFindings",
28
+ "ScheduleWakeup",
29
+ "SendMessage",
30
+ "TaskStop",
31
+ "ToolSearch",
32
+ "Workflow",
33
+ "mcp__fip__check",
34
+ "mcp__fip__communities",
35
+ "mcp__fip__crosswalk",
36
+ "mcp__fip__profile",
37
+ "mcp__fip__recommend"
38
+ ],
39
+ "mcpServers": [
40
+ {
41
+ "name": "fip",
42
+ "status": "connected",
43
+ "source": "dynamic"
44
+ }
45
+ ],
46
+ "toolCalls": [
47
+ "ToolSearch",
48
+ "mcp__fip__communities",
49
+ "mcp__fip__recommend"
50
+ ],
51
+ "answer": "Use **FITS (Flexible Image Transport System)** for your image datasets. Your community's FAIR Implementation Profile (FIESTA Astro FIP) lists it as the agreed format for data. It's the standard astronomy format, built for scientific images, and it can store photometric and spatial calibration information alongside the pixels.\n\nFor metadata records, the same profile lists XML and RDF.\n\nCOMMUNITY_CHOICE: Flexible Image Transport System (FITS)",
52
+ "isError": false,
53
+ "costUsd": 0.0574934,
54
+ "seconds": 10.2,
55
+ "stderr": ""
56
+ }